c - 在 C 中使用 IXMLDOMNode_insertBefore
问题描述
我目前正在开发一个纯 C 应用程序,使用 win32 和一些 MSXML 来处理设置文件。我的文件结构类似于:
<doc>
<Element1>
<A></A>
<C></C>
</Element1>
...
</doc>
我需要<B></B>
在 A 和 C 之间插入一个元素。我发现包装器 IXMLDOMNode_insertBefore 派生自 C++ 方法HRESULT insertBefore( IXMLDOMNode* pNewChild, VARIANT varRefChild, IXMLDOMNode** ppOutNewChild );
。varRefChild
应该引用 C 节点,但我找不到将其地址存储在 VARIANT 结构中的方法。
解决方案
作为文档下的示例IXMLDOMNode::insertBefore
,它使用 aCComVariant varRef
并将其设置为IXMLDOMNode
:
varRef = pXMLNodeRef;
hr = pXMLElement->insertBefore(pXMLNodeNew, varRef, &pXMLNodeCur);
您也可以将其作为operator=
C 中的 CComVariant 类:
CComVariant& operator=(_Inout_opt_ IUnknown* pSrc) ATLVARIANT_THROW()
{
if (vt != VT_UNKNOWN || pSrc != punkVal)
{
ClearThrow(); //VariantClear()
vt = VT_UNKNOWN;
punkVal = pSrc;
// Need to AddRef as VariantClear will Release
if (punkVal != NULL)
punkVal->AddRef();
}
return *this;
}
推荐阅读
- c++ - 将字符串转换为矩阵数组
- css - 当博客标题长度不同时如何使用 flexbox 让元素对齐
- javascript - 在Angular 4中取消选中复选框时如何从JSON数组中删除对象?
- javascript - 反应:没有得到字段的值
- python - 如果元组在执行范围时没有第二个值,如何给出默认值?
- javascript - 点击图片后面包屑向左移动
- objective-c - 如何通过代码为 UI 组件添加 Value?
- kendo-ui - 关于剑道网格中语言的变化我没有得到数据
- insertion-sort - 如何在 8085 微处理器中进行插入排序?
- angular7 - Angular Universal / Node:后端未访问会话。每次重新加载时创建新的