2

我试图找到调用 COM 对象方法的最干净和最快的方法。

我为该对象使用了 RCW,但每次第三方 COM 对象的新版本出现时,它的 GUID 都会发生变化,这会使 RCW 变得无用,所以我不得不更改并开始使用

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

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

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

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

4

1 回答 1

4

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

但是,是 IID(接口 GUID)还是类 GUID 发生了变化?如果是类 GUID 发生变化,则可以定义一次接口,然后通过调用 GetTypeFromProgID 获取 Type。一旦你有了它,你可以将类型传递给 Activator 类的 CreateInstance 方法,然后强制转换为接口,这不会改变。

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

于 2009-03-04T02:37:47.473 回答