首页 > 解决方案 > 在 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 结构中的方法。

标签: cwinapimsxml

解决方案


作为文档下的示例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;
}

推荐阅读