2

我正在开发一个 C# 库,我需要从 COBOL(非托管)代码中调用它。因此,我将 COM 互操作用于这些目的。

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

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 方法时,出现此错误:

类 oleexceptionmanager 未捕获异常 65538。说明:“OLE 参数计数不匹配”(8002000E):参数数量无效

是否可以让 COM 对象函数具有可变数量的参数?

感谢您的任何建议

4

1 回答 1

2

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

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

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

如果您知道正手的最大#parms,则另一种方法是使用此最大#parms 定义您的方法,在其中将它们指定为COM 的可选参数。

缺少的参数作为Type.Missing.

于 2013-08-24T23:17:20.840 回答