Cómo: Utilizar Servidores COM nativos con TLBIMP

Actualización: noviembre 2007

A diferencia de otros lenguajes de .NET, Visual C++ proporciona características de interoperabilidad que permiten el uso directo de funciones no administradas, incluidas las interfaces COM. De este modo, los desarrolladores pueden evitar Tlbimp.exe y sus desventajas. Para obtener más información, vea Utilizar servidores COM nativos de .NET.

En este tema, se muestra cómo se pueden usar objetos COM desde código administrado con la herramienta Importador de la biblioteca de tipos (TlbImp.exe). Esta herramienta de .NET Framework, dada una biblioteca de tipos COM (o simplemente el archivo DLL que contiene el componente COM y la biblioteca de tipos), genera un ensamblado de interoperabilidad administrado que se puede usar con cualquier lenguaje de .NET. Sin embargo, esta técnica no se recomienda para programadores de Visual C++, especialmente para bibliotecas de tipos COM grandes o complejas.

El siguiente ejemplo contiene los pasos y el código necesarios para usar interfaces COM definidas en Quartz.dll, que está instalado en el directorio Windows/System32 en Windows XP. Estas interfaces encapsulan la funcionalidad DirectShow para permitir la reproducción de archivos AVI. Para ejecutar Tlbimp.exe desde la línea de comandos, es necesario agregar las herramientas de .NET Framework a la ruta de acceso del sistema ejecutando Sdkvars.bat en el directorio C:\Archivos de programa\Microsoft.NET\SDK\v2.0\Bin.

Para generar el ensamblado de interoperabilidad

  1. En una ventana de símbolo del sistema, en el directorio c:\windows\system32, ejecute el comando tlbimp quartz.dll. (El nombre del ensamblado de interoperabilidad resultante se basa en el nombre de la biblioteca de tipos COM. En este caso, el archivo resultante es QuartzTypeLib.dll.)

  2. Mueva el ensamblado de interoperabilidad a un directorio donde se ejecutará la aplicación que lo utiliza.

Ejemplo

El código siguiente define una aplicación de consola que utiliza el ensamblado de interoperabilidad generado previamente para mostrar un archivo AVI.

Ejecute el archivo .exe resultante con el nombre de un archivo AVI válido; el archivo se representa en una ventana.

// 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();
}

Vea también

Referencia

Utilizar servidores COM nativos de .NET