gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 11:01:45 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com