如何:将本机 COM 服务器用于 TLBIMP

更新:2007 年 11 月

与其他 .NET 语言不同,Visual C++ 提供允许直接使用非托管函数(包括 COM 接口)的 Interop 功能。利用这一点,开发人员可以避免 Tlbimp.exe 及其缺点。有关更多信息,请参见使用 .NET 中的本机 COM 服务器

本主题演示如何通过托管代码 类型库导入程序 (Tlbimp.exe) 工具使用 COM 对象。如果给定一个 COM 类型库(或包含 COM 组件和类型库的 DLL),此 .NET Framework 工具会生成可由任何 .NET 语言使用的托管互操作程序集。但是,不建议 Visual C++ 程序员使用此技术(特别是处理大型和/或复杂的 COM 类型库时)。

下面的示例包含使用 Quartz.dll 中定义的 COM 接口时所需的步骤和代码,Quartz.dll 安装在 Windows XP 的 Windows/System32 目录中。这些接口封装了 DirectShow 功能,允许播放 AVI 文件。若要从命令行执行 Tlbimp.exe,需要通过执行 C:\Program Files\Microsoft.NET\SDK\v2.0\Bin 目录中的 Sdkvars.bat 将 .NET Framework 工具添加到系统路径中。

生成互操作程序集

  1. 在命令提示窗口中,在 c:\windows\system32 目录中执行 tlbimp quartz.dll 命令。(得到的互操作程序集名称以 COM 类型库的名称为基础;在此示例中,得到的文件为 QuartzTypeLib.dll。)

  2. 将互操作程序集移动到特定的目录中,使用该互操作程序集的应用程序将在此执行。

示例

下面的代码定义一个控制台应用程序,该应用程序使用前面生成的互操作程序集显示一个 AVI 文件。

使用有效的 AVI 文件名称执行得到的 .exe 文件,该文件将在窗口中呈现。

// AVIPlayer.cpp
// compile with: /clr
#using <QuartzTypeLib.dll>
using namespace QuartzTypeLib;

using namespace System;
   
void DisplayUsage() {
   Console::WriteLine("AVIPlayer: Plays AVI files."); 
   Console::WriteLine("Usage: AVIPlayer.EXE <filename>"); 
}

int main() { 
   array<String^>^ args = Environment::GetCommandLineArgs();
   if (args->Length != 2) {
      DisplayUsage();
      return 0;
   } 

   String^ filename = args[1]; 
   if (filename->Equals("/?")) { 
      DisplayUsage();
      return 0;
   }

   FilgraphManager^ graphManager = gcnew FilgraphManager();
   IMediaControl^ mc = dynamic_cast<IMediaControl^>(graphManager);

   mc->RenderFile(filename);
   mc->Run();

   Console::WriteLine("press any key");
   Console::ReadLine();
}

请参见

参考

使用 .NET 中的本机 COM 服务器