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