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

时间:2014-08-11 19:01:29

标签: c# com system.reflection

我正在尝试从我的应用程序中的产品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对象。

1 个答案:

答案 0 :(得分:1)

COM不支持方法重载。这些方法的非托管/已发布COM签名(即TypeLibrary)已经过修饰 - 请参阅下面MSDN文章中提到的“Unmanaged Signature”部分。 http://msdn.microsoft.com/en-us/library/28w1w83f(v=vs.110).aspx

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

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