如何将_variant_t转换为IXMLDOMDocumentPtr?

时间:2014-01-08 11:33:14

标签: c++

有一个用VBA编写的宏,我想从C ++调用:

Public Function MacroName() As DOMDocument

我这样做:

_variant_t ret = d_pApp->Run(_bstr_t("MacroName")).bstrVal;

现在,我想将此视频转换为IXMLDOMDocumentPtr ...

IXMLDOMDocumentPtr d_plDomDocument;
d_plDomDocument = static_cast<IXMLDOMDocumentPtr>(ret);

嗯,这不起作用。错误说,类型错误。 那么施放的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您的错误在这里:

_variant_t ret = d_pApp->Run(_bstr_t("MacroName"))>>>>>.bstrVal;<<<<

应该是:

_variant_t ret = d_pApp->Run(_bstr_t("MacroName"));

一旦你这样做,你可能会发现你的static_cast有效 - 我不记得了。否则,您可以使用以下方法。

首先ret.ChangeType(VT_UNKNOWN)然后如果成功则使用d_plDomDocument = ret.punkVal;。这将在引擎盖下进行QueryInterface

或者只需一步:

d_plDomDocument = IXMLDOMDocumentPtr(ret);

如果无法将变体转换为对象,则会返回NULL _com_ptr_t