繁体   English   中英

从C#客户端应用程序调用ac#COM服务器dll

[英]Calling a c# COM server dll from a C# client app

我得到了一个桌面应用程序,该应用程序使用注册为COM对象的C#编写的小DLL从Active Directory收集一些信息。 该应用程序是用C ++编写的,可以正常工作。 我想用C#编写一个小应用程序,该应用程序将调用相同注册的DLL的方法(测试工具的种类),但在不参考编译时不参考COM DLL的情况下,无法弄清楚该怎么做(我确实需要使用COM注册的dll)

我遵循本文 ,设法实例化了该对象,但无法将实例转换为从IDL创建的接口。 调试器还知道显示所有成员的实例的确切类型。 我怀疑这是由于DLL也加载在CLR中。

这有可能吗?

谢谢

你不能 IDE将拒绝让您添加对类型库的引用。 您可以使用后期绑定来欺骗它。 但这仍然不能欺骗CLR,它不会同时创建CCW和RCW。 您将需要本机客户端(例如C ++或脚本语言)才能真正使用COM特定的路径。

毫无意义,只需直接使用程序集引用并使用普通的C#代码对其进行测试。

您可以使用C#项目中的COM组件。 常规步骤如下:

找到要使用的COM组件并进行注册。 使用regsvr32.exe注册或注销COM DLL。

向项目添加对COM组件或类型库的引用。

添加引用时,Visual Studio使用Tlbimp.exe(类型库导入器)将类型库作为输入,以输出.NET Framework互操作程序集。 该程序集,也称为运行时可调用包装器(RCW),包含托管类和接口,这些类和接口包装了类型库中的COM类和接口。 Visual Studio向项目添加了对所生成程序集的引用。

创建在RCW中定义的类的实例。 反过来,这将创建COM对象的实例。

就像使用其他托管对象一样使用该对象。 当对象被垃圾回收回收时,COM对象的实例也会从内存中释放。

有关更多信息,请参见将COM组件公开到.NET Framework。

详细文章

我建议您使用.NET 4.0 dynamic类型,而不要使用您提到的那篇文章中涉及反射的所有混乱情况

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM