2013-07-03 41 views
2

我正在开发一个C#库,我需要从COBOL(非托管)代码调用。所以我正在使用COM互操作来达到这些目的。COM互操作:可变数量的参数

我创建了一个图层“ModuleLanucher”来调解通信。 我已经通过这些命令注册了这个ModuleLanucher库:

regasm ModuleLanucher.dll /codebase 
TLBEXP Modulelanucher.dll 

一切工作正常,如果我有参数在函数foo的具体数量。 (在下面提到)

不幸的是我的函数foo需要可变数量的参数。 这是我的代码素描:

namespace NMSPC 
{ 
    class ModuleLanucher 
    { 
     void foo(string moduleName, params object[] args) 
     { 
     //call some dlls with args as parameteres 
     } 
    } 
} 

从COBOL代码我打电话COM函数foo:

VCCOMServer is class "$OLE$NMSPC.ModuleLanucher" 

invoke VCCOMServer "new" returning anInstance 
invoke anInstance "foo" using MODULENAME, PARAM01, PARAM02, PARAM03, PARAM04 

当我尝试从这个COBOL代码调用foo方法,我得到这个错误:

异常65538未被类oleexceptionmanager困住。 描述:“OLE参数计数不匹配” (8002000E):参数的无效数量

具有可变数量参数的COM对象函数甚至可能吗?

谢谢任何​​建议

回答

2

COM不支持变量参数列表。 我觉得你的方法的COM部分被转换成:

void foo(string moduleName, object[] args) //note the missing params... 

拨叫COBOL这种方法,你需要传递的对象数组作为第二个参数。

如果您知道正手上的#parms的最大值,另一个选择可以是您使用此最大值#parms定义您的方法,其中您将它们指定为COM的可选项。

缺失参数作为Type.Missing传递。