方法 : TLBIMP でネイティブ COM サーバーを使用する
更新 : 2007 年 11 月
他の .NET 言語とは異なり、Visual C++ には COM インターフェイスなどのアンマネージ関数を直接使用できるようにする相互運用機能が用意されています。この機能を使用すると、開発者は、Tlbimp.exe の使用およびそれによるデメリットを回避できます。詳細については、「.NET からのネイティブな COM サーバーの使用」を参照してください。
このトピックでは、タイプ ライブラリ インポータ (Tlbimp.exe) ツールを使用して、マネージ コードから COM オブジェクトを使用する方法について説明します。COM タイプ ライブラリ (つまり、COM コンポーネントとタイプ ライブラリの両方を含む DLL) を指定することにより、この .NET Framework ツールは、どの .NET 言語からでも使用できるマネージ相互運用機能アセンブリを生成します。ただし、Visual C++ プログラマがこの手法を使用することはお勧めできません。特に大規模または複雑な COM タイプ ライブラリの場合には、使用しないようにしてください。
Quartz.dll で定義した COM インターフェイスを使用するために必要なステップとコードを次の例に示します。Quartz.dll は、Windows XP の Windows/System32 ディレクトリにインストールされます。これらのインターフェイスは、AVI ファイルを再生できるようにするために DirectShow 機能をカプセル化します。コマンド ラインから Tlbimp.exe を実行するには、C:\Program Files\Microsoft.NET\SDK\v2.0\Bin ディレクトリの Sdkvars.bat を実行して、システム パスに .NET Framework のツールを追加する必要があります。
相互運用機能アセンブリを生成するには
コマンド プロンプト ウィンドウで、c:\windows\system32 ディレクトリに移動して、コマンド tlbimp quartz.dll を実行します (生成される相互運用機能アセンブリの名前は、COM タイプ ライブラリの名前に基づきます。この場合、ファイル名は QuartzTypeLib.dll になります)。
相互運用機能アセンブリを使用するアプリケーションが実行されるディレクトリに、このアセンブリを移動します。
使用例
生成済みの相互運用機能アセンブリを使用して AVI ファイルを表示するコンソール アプリケーションを定義するコードを次に示します。
有効な AVI ファイル名が付けられた生成後の .exe ファイルを実行すると、ウィンドウ内にそのファイルが表示されます。
// 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();
}