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

时间:2009-03-04 02:31:51

标签: reflection com interop rcw

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

我正在使用RCW作为对象,但每次第三方COM对象的新版本出现其GUID更改,然后渲染RCW无用,所以我不得不改变并开始使用

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

因此,每次出现新版本的COM对象时,我都不必重新部署和重新部署我的应用程序。

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

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

1 个答案:

答案 0 :(得分:4)

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

但是,它是IID(接口GUID)还是更改的类GUID?如果是更改的类GUID,则可以定义一次接口,然后通过调用GetTypeFromProgID获取Type。完成后,可以将类型传递给Activator类上的CreateInstance方法,然后转换为接口,该接口不会更改。

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