我正在尝试找到调用COM对象方法的最简洁,最快捷的方法。
我正在使用RCW作为对象,但每次第三方COM对象的新版本出现其GUID更改,然后渲染RCW无用,所以我不得不改变并开始使用
Type mytype = Type.GetTypeFromProgID("MyCOMApp.Application");
因此,每次出现新版本的COM对象时,我都不必重新部署和重新部署我的应用程序。
目前我正在使用像mytype.InvokeMemeber
这样的反思,但我觉得它与调用RCW相比速度太慢了。
其他人如何解决更改第三方COM对象版本的问题,但仍然保持RCW的速度?
答案 0 :(得分:4)
如果你想让反射中的调用更容易,你可以使用VB.NET,并对类型为Object的变量进行延迟调用。 VB.NET将帮助调用反射。您还可以设置对Microsoft.VisualBasic.dll的引用,并调用CallByName以帮助进行反射调用。
但是,它是IID(接口GUID)还是更改的类GUID?如果是更改的类GUID,则可以定义一次接口,然后通过调用GetTypeFromProgID获取Type。完成后,可以将类型传递给Activator类上的CreateInstance方法,然后转换为接口,该接口不会更改。
但是,如果IID确实发生变化,则每次都必须使用反射。