使用调用成员调用从 COM 获取引用参数



我正在尝试使用InvokeMember调用COM服务器的方法。该方法具有以下签名:

            void InsUpdOpInstance(
                        [in] long inIdOperDescr, 
                        [in] long inIsWait, 
                        [in] VARIANT stVariables, 
                        [in] long inIdProc, 
                        [in, out] VARIANT* inIdOperInst, 
                        [out] VARIANT* inReturnCode, 
                        [out] VARIANT* stErrorMessage);

我的问题是恢复 IdOperInst 参数值。以下代码不起作用:

var parameters = new object[] {12,0,"test",25655,DBNull.Value,null,null};
ParameterModifier modifier = new ParameterModifier(parameters.Length);
modifier[4] = true;
modifier[5] = true;
modifier[6] = true;
var ret = WFType.InvokeMember("InsUpdOpInstance",BindingFlags.InvokeMethod,null,Server,parameters,new ParameterModifier[]{modifier},null,null);

调用参数 [4] 后不更改值

以下代码工作正常:

dynamic serv = Server;
object inError = null;
object stError = null;
object inId = DBNull.Value;
serv.InsUpdOpInstance(12,0,"test",25655,ref inId,out inError,out stError);

调用参数 inId 值后已更改
为什么调用成员不起作用?

以下代码工作正常:

var parameters = new object[] {12,0,"test",25655,new System.Runtime.InteropServices.VariantWrapper(DBNull.Value),null,null};
ParameterModifier modifier = new ParameterModifier(parameters.Length);
modifier[4] = true;
modifier[5] = true;
modifier[6] = true;
var ret = WFType.InvokeMember("InsUpdOpInstance",BindingFlags.InvokeMethod,null,Server,parameters,new ParameterModifier[]{modifier},null,null);

修复是将 ref 参数包装到 System.Runtime.InteropServices.VariantWrapper 类

相关内容

  • 没有找到相关文章

最新更新