我正在开发一个 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/