Condividi tramite


Procedura: utilizzare server COM nativi con TLBIMP

Aggiornamento: novembre 2007

A differenza degli altri linguaggi .NET, in Visual C++ sono disponibili funzionalità di interoperabilità che consentono di utilizzare direttamente le funzioni non gestite, incluse le interfacce COM. Questo consente agli sviluppatori di non utilizzare Tlbimp.exe, evitando i relativi svantaggi. Per ulteriori informazioni, vedere Utilizzo di server COM nativi da .NET.

In questo argomento viene illustrato come utilizzare gli oggetti COM dal codice gestito senza ricorrere allo strumento Utilità di importazione della libreria dei tipi (Tlbimp.exe). Questo strumento di .NET Framework, data una libreria dei tipi COM, o semplicemente la DLL contenente sia il componente COM che la libreria dei tipi, genera un assembly di interoperabilità gestito che può essere utilizzato da un qualsiasi linguaggio .NET. Questa tecnica, tuttavia, soprattutto in caso di librerie dei tipi COM di grandi dimensioni e/o complesse, non è consigliata per i programmatori Visual C++.

Nell'esempio riportato di seguito vengono forniti i passaggi e il codice necessari per utilizzare le interfacce COM definite nel file Quartz.dll, installato nella directory Windows/System32 in Windows XP. Queste interfacce incapsulano la funzionalità DirectShow per consentire la riproduzione dei file AVI. Per eseguire Tlbimp.exe dalla riga di comando, è necessario aggiungere gli strumenti di .NET Framework al percorso di sistema eseguendo il file Sdkvars.bat disponibile nella directory C:\Programmi\Microsoft.NET\SDK\v2.0\Bin.

Per generare l'assembly di interoperabilità

  1. In una finestra del prompt dei comandi spostarsi nella directory c:\windows\system32 ed eseguire il comando tlbimp quartz.dll. Il nome dell'assembly di interoperabilità risultante dipende dal nome della libreria dei tipi COM. In questo caso, il file risultante è QuartzTypeLib.dll.

  2. Spostare l'assembly di interoperabilità in una directory da cui verrà eseguita l'applicazione che utilizza tale assembly.

Esempio

Nell'esempio di codice riportato di seguito viene definita un'applicazione console che utilizza l'assembly di interoperabilità precedentemente generato per visualizzare un file AVI.

Eseguire il file exe risultante con il nome di un file AVI valido. Il rendering del file verrà eseguito in una finestra.

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

Vedere anche

Riferimenti

Utilizzo di server COM nativi da .NET