【问题标题】:COM interop: Variable number of parametersCOM 互操作:可变数量的参数
【发布时间】:2013-08-25 07:17:20
【问题描述】:

我正在开发一个 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 对象函数具有可变数量的参数?

感谢您的任何建议

【问题讨论】:

    标签: c# com-interop cobol


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-22
      • 2011-01-23
      • 2011-11-28
      • 2014-01-16
      • 2018-04-16
      相关资源
      最近更新 更多