将进程内 COM 服务器对象添加到 C# 应用程序
Posted
技术标签:
【中文标题】将进程内 COM 服务器对象添加到 C# 应用程序【英文标题】:Adding an in-proc COM Server object to a C# application 【发布时间】:2010-08-06 23:54:04 【问题描述】:我是 COM 新手,需要将一个服务器 COM 对象添加到我的 c# 应用程序中,以便我可以调用它的方法并实现事件。我的文档说这需要一种可识别 COM 的语言,例如 Visual C++。我的应用程序是用 C# 编写的,所以我不确定它是如何工作的。任何方向将不胜感激。
我正在编写一个与串行超级通信终端通信的应用程序。该设备带有一个 DLL(com 服务器接口),我需要弄清楚如何在我的 c# 应用程序中使用它。
我在我的项目中添加了对 DLL 的引用,它显示为类型库。在对象资源管理器中,我得到了接口和一些类等。
谢谢, 马特
【问题讨论】:
【参考方案1】:您可以添加 COM 对象作为参考。 .NET 将创建一个互操作程序集来处理 COM 对象,就像它是一个 .NET 类型一样。
【讨论】:
谢谢,我在项目中添加了对 DLL 的引用,它显示为类型库。在对象资源管理器中,我得到了接口和一些类等。现在我只是不知道如何真正使用它们,因为我拥有的唯一示例代码是 C++ 并使用从 CComObjectRoot 继承的类。 @pkan522:您应该有一些可以在该库中实例化的对象(实现您需要的接口)。只需像任何其他 .NET 对象一样构造它们。【参考方案2】:-
CComObjectRoot 可用作所有使用 ATL 实现的 COM 对象的基类。因此,您不必担心在 C# 中实现类似的东西,所需的方法(AddRef、Release、QueryInterface)将由 tlbexp 为带有ClassInterface 标记的类生成。
STDMETHODIMP 是一个定义,用于声明可从 COM 调用的最常用方法 (#define STDMETHODIMP HRESULT STDMETHODCALLTYPE)。同样,如果您的班级使用 ClassInterface 标记,您将不必担心。
当您的类实现多个接口时,在 C++ 中需要这种构造。如果您告诉 C# 编译器您的 C# 对象实现 IDispatch、IFPESOlementationEvents,我认为这不是必需的。适当的代码将由编译器自动编写。
如果您是 COM 和 C# 的新手,可能所有内容都没有多大意义,我建议您看一下您可能在网络上找到的各种介绍,例如 this。
【讨论】:
以上是关于将进程内 COM 服务器对象添加到 C# 应用程序的主要内容,如果未能解决你的问题,请参考以下文章