gpt4 book ai didi

c# - 传递 COM 方法默认参数

转载 作者:行者123 更新时间:2023-11-30 16:52:28 27 4
gpt4 key购买 nike

我有一个用 C# 编写的 ComVisible COM 类。我想使用 COM 从另一个 C# 代码位调用它并传递参数的默认值。我可以在没有默认参数的情况下调用许多其他方法。

这是我能想到的最好的。前两行适用于我的所有其他方法。

Type mytype = Type.GetTypeFromProgID("MyType");
dynamic myinstance = Activator.CreateInstance(mytype);
object missingValue = System.Reflection.Missing.Value;
myinstance.generatecsvdocument("mystring", ref missingValue);

我的方法是这样的:

public void generatecsvdocument(string mystring, string rowseperator = "\n")

当我运行它时出现错误:

The best overloaded method match for 'generatecsvdocument(string, string)' has some invalid arguments

最佳答案

  object missingValue = System.Reflection.Missing.Value;

这在这里行不通。它仅对采用 VARIANT 作为参数的 COM 方法有效。看起来像 C# 中的 objectdynamic。一种与 C# 支持的默认参数机制截然不同的类型,它是确定默认值的被调用方。在 C# 中,它是由调用者决定的,C# 编译器使用元数据来了解默认值。

Missing.Value 在运行时生成一个 vtError 类型的变体,其值为 DISP_E_PARAMNOTFOUND。向 COM 方法发出信号以使用默认值。实际上并不那么常用,通常只在支持脚本语言的 COM 服务器中实现。办公自动化是最常见的例子,可能是激发您尝试这个的原因。

但是不,你的参数是string,不是变体。当您使用后期绑定(bind)时,也无法发现默认值,隐含的是您对存储在元数据中的默认值一无所知。否则vtError机制存在的原因,脚本语言也有同样的问题。取得成功的唯一真正方法是重写方法并测试 null 参数,如果是这种情况则替换为“\n”。

关于c# - 传递 COM 方法默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32521574/

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