OLE自动化与C++;:从Invoke()接收空变量而不是有效结果 在C++中,我试图调用一个OLE方法,它看起来像: HRESULT GetFirstMono( [out] BSTR* name, [out, retval] BSTR* monoID);

OLE自动化与C++;:从Invoke()接收空变量而不是有效结果 在C++中,我试图调用一个OLE方法,它看起来像: HRESULT GetFirstMono( [out] BSTR* name, [out, retval] BSTR* monoID);,c++,com,invoke,ole,idispatch,C++,Com,Invoke,Ole,Idispatch,我使用以下代码来调用它(改编自): 。当我从LabView调用它时,完全相同的方法工作得很好,所以我认为问题出在我的代码中的某个地方。如何恢复名称输出?以防其他人遇到同样的问题:我无法解决它,但这里有一个解决方法。我没有使用IDispatch接口的Invoke方法,而是为声明GetFirstMono的接口创建了一个头文件,使用了一个名为MIDL的Microsoft程序,但也可以手动完成(只需使用ole/com查看器查找接口的方法并编写相应的头文件)。然后,对该方法的调用非常简单: BSTR na

我使用以下代码来调用它(改编自):


。当我从LabView调用它时,完全相同的方法工作得很好,所以我认为问题出在我的代码中的某个地方。如何恢复名称输出?

以防其他人遇到同样的问题:我无法解决它,但这里有一个解决方法。我没有使用IDispatch接口的
Invoke
方法,而是为声明
GetFirstMono
的接口创建了一个头文件,使用了一个名为MIDL的Microsoft程序,但也可以手动完成(只需使用ole/com查看器查找接口的方法并编写相应的头文件)。然后,对该方法的调用非常简单:

BSTR name, monoId;
HRESULT hr = interfacePointer->GetFirstMono(name, monoId);
更多信息请访问。希望能有帮助


顺便说一句:我仍然对原来的问题感兴趣。如果你知道答案,请贴出来

尝试将type
VT|BSTR | VT_BYREF
设置为参数0

ccombstrname;
V|u VT(&dp.rgvarg[0])=VT|BSTR | VT|u BYREF;
V_bstref(&dp.rgvarg[0])=&bstrName;

不应该
dp.cArgs
包含值
2
(我的意思是
dp.cArgs=cArgs+1
)?因为该方法需要两个参数。如果没有帮助:检查
Invoke
HRESULT
返回值。我不太清楚原因,但是如果我设置
dp.cArgs=cArgs+1
,程序就会崩溃。据我所知,标记为retval的参数返回变量
pvResult
;另一个应通过
dp
返回。我很确定我想要的结果不会出现在HRESULT中,因为它只用于错误管理等。
oleCall()
vt: 0
BSTR name, monoId;
HRESULT hr = interfacePointer->GetFirstMono(name, monoId);