使用反射从COM对象调用重载方法

本文关键字:调用 重载 方法 对象 COM 反射 | 更新日期: 2023-09-27 18:17:35

我试图在我的应用程序中调用一个来自产品COM API的方法。

我可以使用下面的代码成功地使用单个参数调用方法,但我需要传递一些额外的参数(这些参数作为重载添加)。

Type _apiType = Type.GetTypeFromProgID("TheAPI.TheServer");
object _api = Activator.CreateInstance(_apiType);
_apiType.InvokeMember(
    "Connect",
    System.Reflection.BindingFlags.InvokeMethod,
    null,
    _api,
    new object[] { 2 } // new object[] {2, "", "" }
);

我已经尝试在上面的代码中添加额外的参数,但我得到以下错误:

"指定的参数个数与期望的个数不匹配。"

我似乎找不到任何答案,我开始认为这是不可能的。我发现的所有例子都建议使用Type.GetMethod(),但这似乎对COM对象不起作用。

使用反射从COM对象调用重载方法

COM不支持方法重载。这些方法的非托管/发布的COM签名(即TypeLibrary)是装饰的——参见下面MSDN文章中提到的"非托管签名"部分。http://msdn.microsoft.com/en-us/library/28w1w83f (v = vs.110) . aspx

要在Visual Studio中查找实际的方法名,请执行以下操作:视图|对象浏览器|编辑自定义组件集|(浏览到COM组件)

这将显示所有实际的方法名。