gpt4 book ai didi

c++ - 如何将 _variant_t 转换为 IXMLDOMDocumentPtr?

转载 作者:行者123 更新时间:2023-11-28 07:10:54 24 4
gpt4 key购买 nike

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

Public Function MacroName() As DOMDocument

我是这样做的:

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

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

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

嗯,那行不通。错误说,类型错误。那么正确的转换方式是什么?

最佳答案

你的错误在这里:

_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

关于c++ - 如何将 _variant_t 转换为 IXMLDOMDocumentPtr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20994459/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com