我有一个com组件,我想使用vb.net的后期绑定(使用痛苦的主interop程序集-pia方法)调用它。
com方法的idl签名如下:
HRESULT Send([in]BSTR bstrRequestData,
[out]VARIANT *pvbstrResponseData,
[out]VARIANT *pvnExtCompCode,
[out,retval]int *pnCompletionCode);
vb.net语言中的两个“byref”参数和一个返回值。
我试图这样调用此方法:
Dim parameters(2) As Object
parameters(0) = "data"
parameters(1) = New Object()
parameters(2) = New Object()
Dim p As New ParameterModifier(3)
p(1) = True
p(2) = True
Dim parameterMods() As ParameterModifier = {p}
objReturn = MyObject.GetType().InvokeMember("Send", _
BindingFlags.InvokeMethod, _
Nothing, _
MyObject, _
parameters, _
parameterMods, _
Nothing, _
Nothing)
此操作异常失败:{“无效被调用方”。(hresult的异常:0x80020010(disp_e_badcalee))“}
我想这意味着我在参数数组中做错了什么。因为如果我将parametermods数组的任何值设置为“true”,它就可以工作。当然,它不会更新作为[out]参数的参数,因此无法按预期工作。
由于方法也有一个返回值,还有什么需要考虑的吗?这个
MSDN example
除了示例没有返回值之外,几乎所有的操作都与我正在做的完全相同。如有任何帮助,我们将不胜感激。