65.9K
CodeProject 正在变化。 阅读更多。
Home

.NET 中的 COM

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.73/5 (20投票s)

2008 年 2 月 3 日

CPOL

2分钟阅读

viewsIcon

75041

downloadIcon

859

一篇关于 .NET 中 COM 的文章

引言

组件对象模型 (COM) 是一种促进不同应用程序和语言之间通信的方法。 还有许多其他方法来构建软件组件。 COM 令人感兴趣的是,它是一种被广泛接受的互操作性标准。 此外,该标准还解释了所有对象应如何组织内存。

接口是客户端和服务器之间的契约,即接口是对象向外部世界公开其功能的途径。 在 COM 中,接口是对象实现的函数指针表。 该表代表接口,而指向它的函数是该接口的方法。

在 .NET 中创建 COM 组件

在 .NET 中创建 COM 组件并不像在 C++ 中那样困难。 以下步骤说明了在 C# 中创建 COM 服务器的方法

  1. 创建一个新的类库项目。
  2. 创建一个新的接口,例如 IManagedInterface,并声明所需的方法。 然后使用 System.Runtime.InteropServices 中定义的 GuidAttribute 为接口提供 Guid(这是 IID)。 可以使用 Guidgen.exe 创建 Guid[Guid("3B515E51-0860-48ae-B49C-05DF356CDF4B")]
  3. 定义一个实现此接口的类。 同样为这个类提供 Guid(这是 CLSID)。
  4. 将程序集标记为 ComVisible。 为此,请转到 AssemblyInfo.cs 文件并添加以下语句 [assembly: ComVisible (true)]。 这将赋予程序集内所有类型对 COM 的可访问性。
  5. 构建项目。 这将在输出路径中生成一个程序集。 现在使用 regasm.exe(随 .NET Framework 提供的工具)注册程序集 - regasm \bin\debug\ComInDotNet.dll \tlb:ComInDotNet.tlb。 注册后,这将创建一个 TLB 文件。
  6. 或者,这可以在项目属性 -> 构建 -> 选中“注册 COM 互操作”中完成。

COM 服务器已准备就绪。 现在必须创建一个客户端。 它可以是任何语言。 如果客户端是 .NET,只需将上述创建的 COM 程序集作为引用添加并使用它即可。

以下步骤说明了创建非托管客户端的方法。 这里客户端在 VC++ 6.0 中。

  1. 使用 MSDEV 6.0 中的向导创建一个 MFC AppWizard EXE。
  2. 使用 #import 指令导入 COM 服务器(由 regasm.exe 生成的 TLB 文件)。 #import “ComInDotNet.tlb” no_namespace named_guids raw_interfaces_only
  3. 现在应该使用 CoInitialize 加载 COM 库,并使用 CoCreateInstance 创建组件。
  4. 接下来可以调用 COM 服务器中定义的方法。 pInterface->Execute(“blah blah blah”);
© . All rights reserved.