Partager via


Comment : utiliser des serveurs COM natifs avec TLBIMP

Mise à jour : novembre 2007

Contrairement à d'autres langages .NET, Visual C++ propose des fonctionnalités d'interopérabilité qui permettent l'utilisation directe de fonctions non managées, notamment d'interfaces COM. Cela permet aux développeurs d'éviter le fichier Tlbimp.exe et ses inconvénients. Pour plus d'informations, consultez Utilisation de serveurs COM natifs à partir du .NET.

Cette rubrique montre comment les objets COM peuvent être utilisés à partir du code managé à l'aide de l'outil Type Library Importer (Tlbimp.exe). Cet outil du .NET Framework, qui possède une bibliothèque de types COM (ou simplement la DLL contenant à la fois le composant COM et la bibliothèque de types), génère un assembly d'interopérabilité managé qui peut être utilisé à partir de tout langage .NET. Toutefois, cette technique n'est pas recommandée pour les programmeurs Visual C++ (en particulier pour les bibliothèques de types COM volumineuses et/ou complexes).

L'exemple suivant contient les étapes et le code nécessaires à l'utilisation d'interfaces COM définies dans Quartz.dll, qui est installé dans le répertoire Windows/System32 sous Windows XP. Ces interfaces encapsulent les fonctionnalités DirectShow pour autoriser la lecture de fichiers AVI. Pour exécuter Tlbimp.exe à partir de la ligne de commande, vous devez ajouter les outils du Kit de développement .NET Framework SDK au chemin d'accès système en exécutant Sdkvars.bat dans le répertoire C:\Program Files\Microsoft.NET\SDK\v2.0\Bin.

Pour générer l'assembly d'interopérabilité

  1. Au sein d'une fenêtre d'invite de commandes, exécutez la commande tlbimp quartz.dll dans le répertoire c:\windows\system32. (Le nom de l'assembly d'interopérabilité résultant se base sur le nom de la bibliothèque de types COM ; dans ce cas, le fichier résultant est QuartzTypeLib.dll.)

  2. Déplacez l'assembly d'interopérabilité vers un répertoire qui sera utilisé pour exécuter l'application.

Exemple

Le code suivant définit une application console qui utilise l'assembly d'interopérabilité généré précédemment pour afficher un fichier AVI.

Exécutez le fichier .exe résultant avec le nom d'un fichier AVI valide afin que le fichier soit restitué dans une fenêtre.

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

Voir aussi

Référence

Utilisation de serveurs COM natifs à partir du .NET