Freigeben über


Gewusst wie: Verwenden von systemeigenen COM-Servern mit TLBIMP

Aktualisiert: November 2007

Im Gegensatz zu anderen .NET-Sprachen bietet Visual C++ Interop-Funktionen, durch die nicht verwaltete Funktionen, einschließlich COM-Schnittstellen, direkt verwendet werden können. Auf diese Weise können Entwickler Tlbimp.exe und seine Nachteile vermeiden. Weitere Informationen finden Sie unter Verwenden systemeigener .NET-COM-Server.

In diesem Thema wird dargestellt, wie COM-Objekte über verwalteten Code im Type Library Importer-Tool (Tlbimp.exe)-Tool verwendet werden können. Dieses .NET Framework-Tool generiert anhand einer COM-Typbibliothek (oder nur der DLL, die sowohl die COM-Komponente als auch die Typbibliothek enthält) eine verwaltete Interop-Assembly, die von beliebigen .NET-Sprachen verwendet werden kann. Diese Methode wird Visual C++-Programmierern jedoch nicht empfohlen, besonders bei großen oder komplexen COM-Typbibliotheken.

Das folgende Beispiel enthält die Schritte und den erforderlichen Code zur Verwendung der in Quartz.dll definierten COM-Schnittstellen. Die Quartz.dll ist im Windows/System32-Verzeichnis von Windows XP installiert. Diese Schnittstellen umfassen DirectShow-Funktionalität für die Wiedergabe von AVI-Dateien. Um Tlbimp.exe über die Befehlszeile auszuführen, müssen Sie die .NET Framework SDK-Tools dem Systempfad hinzufügen, indem Sie Sdkvars.bat im Verzeichnis C:\Programme\Microsoft.NET\SDK\v2.0\Bin ausführen.

So erzeugen Sie die Interop-Assembly

  1. Führen Sie in einem Eingabeaufforderungsfenster im Verzeichnis C:\Windows\System32 den Befehl tlbimp quartz.dll aus. (Der Name der resultierenden Interop-Assembly basiert auf dem Namen der COM-Typbibliothek. In diesem Fall lautet der Dateiname QuartzTypeLib.dll.)

  2. Verschieben Sie die Interop-Assembly in das Verzeichnis, in dem die Anwendung ausgeführt wird, die sie verwendet.

Beispiel

Der folgende Code definiert eine Konsolenanwendung, bei der die zuvor erzeugte Interop-Assembly zur Anzeige einer AVI-Datei verwendet wird.

Wenn Sie die resultierende EXE-Datei mit dem Namen einer gültigen AVI-Datei ausführen, wird diese in einem Fenster angezeigt.

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

Siehe auch

Referenz

Verwenden systemeigener .NET-COM-Server