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

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

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

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

目前我正在使用像 mytype.InvokeMemeber 这样的反思,但我觉得与仅调用RCW相比它是如此之慢。

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

有帮助吗?

解决方案

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top