我想调用一个COM对象方法,该方法采用的参数是PowerBuilder中的数组。该方法可以从其他OLE自动化控制器(VB6,VBScript,VBA,Delphi,PHP等)中很好地工作,在IDL中,它看起来像这样:
void MyMethod([in, out] SAFEARRAY(VARIANT)* argumentsArray);
到目前为止,我尚未成功从PowerBuilder调用此方法。我总是收到类似于“在XXXXXX中的第XX行调用外部对象函数MyMethod的无效参数类型”类似的运行时错误。据我所知,此错误是在我的方法被调用之前由PowerBuilder生成的,即,它不是从方法本身转换而来的HRESULT,并且根本不会被调用。
我从PowerBuilder调用同一COM对象的其他方法没有问题-那些不使用数组作为参数的方法。
我尝试过但不能奏效的PowerBuilder代码示例如下:
Any Arguments[]
Arguments[1] = MyArgument
MyObject.MyMethod(Arguments)
或
OLEObject Arguments[]
Arguments[1] = MyArgument
MyObject.MyMethod(Arguments)
或
OLEObject Arguments[0 to 0]
Arguments[0] = MyArgument
MyObject.MyMethod(Arguments)
或
OLEObject Arguments[0 to 0]
Arguments[0] = MyArgument
MyObject.MyMethod(REF Arguments)
我已经搜索了StackOverflow和Web,并且只找到了相反问题的答案-如何将COM方法结果数组传递给PowerBuilder。
然后如何传递数组?