有一个用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);
嗯,这不起作用。错误说,类型错误。 那么施放的正确方法是什么?
答案 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
。