c# - COM 互操作 : Variable number of parameters

标签 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 对象函数?

感谢您的建议

最佳答案

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

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

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

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

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

关于c# - COM 互操作 : Variable number of parameters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17445636/

相关文章:

c# - 导航属性和级联删除

stored-procedures - 如何从 DB2 上的 COBOL 存储过程调用 COBOL 批处理程序

c# - 宏调用后通过 C# 检测/关闭 excel 消息框

c# - 如何在 WinForms 中创建线程?

C# COM 互操作 : Writing to a Cell in an Excel Sheet

c# - 托管时 ASP.Net Com-InterOp Excel 生成问题

Cobol - 导入带实数的带符号数字

cobol - 如何判断模块是动态调用还是静态调用?

c# - 匿名方法应该按条件返回一个字符串

.net - 通过 COM 互操作调用时,Type.GetType 返回 null