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);