reflection - 不使用 RCW 调用 COM 对象方法的最快方法

标签 reflection com interop rcw

我正在尝试找到调用 COM 对象方法的最简洁、最快的方法。

我为该对象使用了 RCW,但每次第三方 COM 对象的新版本出现时,其 GUID 都会发生变化,从而导致 RCW 无用,因此我必须进行更改并开始使用

Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application"); 

这样每次出现新版本的 COM 对象时,我就不必重新编译和重新部署我的应用程序。

目前,我正在使用像 mytype.InvokeMemeber 这样的反射,但我觉得与仅调用 RCW 相比,它太慢了。

其他人如何解决更改第 3 方 COM 对象版本的问题,同时仍保持 RCW 的速度?

最佳答案

如果您想让反射调用更容易,您可以使用 VB.NET,并对类型为 Object 的变量进行后期调用。 VB.NET 将帮助调用反射。您还可以设置对 Microsoft.VisualBasic.dll 的引用并调用 CallByName 以帮助进行反射调用。

但是,改变的是 IID(接口(interface) GUID)还是类 GUID?如果是类 GUID 发生变化,那么您可以定义一次接口(interface),然后通过调用 GetTypeFromProgID 获取 Type。完成后,您可以将类型传递给 Activator 类上的 CreateInstance 方法,然后转换为接口(interface),这不会改变。

但是,如果 IID 确实发生变化,则每次都必须使用反射。

关于reflection - 不使用 RCW 调用 COM 对象方法的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/609054/

相关文章:

c# - 替换仅通过反射加载的程序集

c# - C++/CLI 中的 ComVisible

C# 获取非托管 C dll 导出列表

c# - 具有附加异常处理的异步任务<T>的超时

Java:将字符串动态转换为原始类型

java - 如何确定两个参数是否是相同但未知类的实例?

c# - 通过 COM 互操作从 C++ 抛出到 C# 时丢失异常详细信息?

C# Com Interop 与 Windows Media Player 可视化(带有示例代码)

c# - 在 C++ 中使用 C# 代码的可能方法有哪些

c# - 从字符串创建属性选择器表达式