我正在开发一个C#库,我需要从COBOL(非托管)代码调用。所以我使用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对象函数是否可行?
感谢您提出任何建议
答案 0 :(得分:2)
COM不支持变量参数列表。 我认为你的方法的COM部分转换为:
void foo(string moduleName, object[] args) //note the missing params...
要从COBOL调用此方法,您需要传递一个对象数组作为第二个参数。
如果您知道正手的最大#parms,可以选择使用此最大#parms定义您的方法,您可以将其指定为COM的可选项。
缺少参数作为Type.Missing
传递。