.NET 中的 COM
一篇关于 .NET 中 COM 的文章
引言
组件对象模型 (COM) 是一种促进不同应用程序和语言之间通信的方法。 还有许多其他方法来构建软件组件。 COM 令人感兴趣的是,它是一种被广泛接受的互操作性标准。 此外,该标准还解释了所有对象应如何组织内存。
接口是客户端和服务器之间的契约,即接口是对象向外部世界公开其功能的途径。 在 COM 中,接口是对象实现的函数指针表。 该表代表接口,而指向它的函数是该接口的方法。
在 .NET 中创建 COM 组件
在 .NET 中创建 COM 组件并不像在 C++ 中那样困难。 以下步骤说明了在 C# 中创建 COM 服务器的方法
- 创建一个新的类库项目。
- 创建一个新的接口,例如
IManagedInterface
,并声明所需的方法。 然后使用System.Runtime.InteropServices
中定义的GuidAttribute
为接口提供Guid
(这是IID
)。 可以使用 Guidgen.exe 创建Guid
。[Guid("3B515E51-0860-48ae-B49C-05DF356CDF4B")]
- 定义一个实现此接口的类。 同样为这个类提供
Guid
(这是CLSID
)。 - 将程序集标记为
ComVisible
。 为此,请转到 AssemblyInfo.cs 文件并添加以下语句[assembly: ComVisible (true)]
。 这将赋予程序集内所有类型对 COM 的可访问性。 - 构建项目。 这将在输出路径中生成一个程序集。 现在使用 regasm.exe(随 .NET Framework 提供的工具)注册程序集 - regasm
\bin\debug\ComInDotNet.dll \tlb:ComInDotNet.tlb 。 注册后,这将创建一个 TLB 文件。 - 或者,这可以在项目属性 -> 构建 -> 选中“注册 COM 互操作”中完成。
COM 服务器已准备就绪。 现在必须创建一个客户端。 它可以是任何语言。 如果客户端是 .NET,只需将上述创建的 COM 程序集作为引用添加并使用它即可。
以下步骤说明了创建非托管客户端的方法。 这里客户端在 VC++ 6.0 中。
- 使用 MSDEV 6.0 中的向导创建一个 MFC AppWizard EXE。
- 使用
#import
指令导入 COM 服务器(由 regasm.exe 生成的 TLB 文件)。#import “ComInDotNet.tlb” no_namespace named_guids raw_interfaces_only
。 - 现在应该使用
CoInitialize
加载 COM 库,并使用CoCreateInstance
创建组件。 - 接下来可以调用 COM 服务器中定义的方法。
pInterface->Execute(“blah blah blah”);