我正在尝试找到调用 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/