COM interop:可变数量的参数

时间:2013-07-03 10:30:07

标签: c# com-interop cobol

我正在开发一个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对象函数是否可行?

感谢您提出任何建议

1 个答案:

答案 0 :(得分:2)

COM不支持变量参数列表。 我认为你的方法的COM部分转换为:

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

要从COBOL调用此方法,您需要传递一个对象数组作为第二个参数。

如果您知道正手的最大#parms,可以选择使用此最大#parms定义您的方法,您可以将其指定为COM的可选项。

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