Share via


方法: winmdidl.exe と midlrt.exe を使用して、Windows メタデータから .h ファイルを作成する

winmdidl.exe と midlrt.exe によって、ネイティブ C++ コードと Windows ランタイム コンポーネントの間の COM レベルの相互作用が可能になります。 winmdidl.exe は、入力として Windows ランタイム コンポーネントのメタデータが含まれる .winmd ファイル受け取り、IDL ファイルを出力します。 midlrt.exe は、IDL ファイルを C++ コードで使用できるヘッダー ファイルに変換します。 両方のツールはコマンド ラインで実行されます。

これらのツールは、次の 2 つの主要シナリオで使用します。

  • Windows ランタイム テンプレート ライブラリ (WRL) を使用して作成された C ++ アプリケーションが、カスタム Windows ランタイム コンポーネントを使用できるようにする、カスタム IDL ファイルとヘッダー ファイルの作成。

  • Windows ランタイム コンポーネントでのユーザー定義のイベントの種類用のプロキシおよびスタブ ファイルの生成。 詳細については、「Windows ランタイム コンポーネントのカスタム イベントおよびイベント アクセサー」を参照してください。

これらのツールは、カスタム .winmd ファイルを解析する場合にのみ必要です。 Windows オペレーティング システムのコンポーネント用の .idl および .h ファイルは、既に生成されます。 Windows 8.1 の既定では、これらは \Program Files (x86)\Windows Kits\8.1\Include\winrt\ にあります。

ツールの場所

Windows 8.1 の既定では、winmdidl.exe と midlrt.exe は C:\Program Files (x86)\Windows Kits\8.1\ にあります。 ツールのバージョンは、\bin\x86\ および \bin\x64\ フォルダーでも使用できます。

winmdidl のコマンド ライン引数

Winmdidl.exe [/nologo] [/suppressversioncheck] [/time] [/outdir:dir] [/banner:file] [/utf8] Winmdfile

/nologo
winmdidl の著作権メッセージとバージョン番号のコンソール表示を防ぎます。

/suppressversioncheck
使用しません。

/time
コンソール出力に総実行時間を表示します。

/outdir:dir
出力ディレクトリを指定します。 パスに空白が含まれる場合は、引用符を使用します。 既定の出力ディレクトリは、"<ドライブ>":\Users\"<ユーザー名>"\AppData\Local\VirtualStore\Program Files (x86)\Microsoft Visual Studio 12.0\ です。

/banner:file
生成された .idl ファイルの先頭にある既定の著作権メッセージと winmdidl のバージョン番号に付加するカスタム テキストを含むファイルを指定します。 パスに空白が含まれる場合は、引用符を使用します。

/utf8
ファイルを UTF-8 として書式設定します。

Winmdfile
解析する .winmd ファイルの名前。 パスに空白が含まれる場合は、引用符を使用します。

midlrt のコマンド ライン引数

MIDLRT および Windows ランタイム コンポーネント」を参照してください。

次の例に、Visual Studio x86 コマンド プロンプトでの winmdidl コマンドを示します。 これは、出力ディレクトリと、生成された .idl ファイルに追加する特別な見出しテキストが含まれるファイルを指定します。

C:\Program Files (x86)\Microsoft Visual Studio 12.0>winmdidl /nologo /outdir:c:\users\giraffe\documents\ /banner:c:\users\giraffe\documents\banner.txt "C:\Users\giraffe\Documents\Visual Studio 2013\Projects\Test_for_winmdidl\Debug\Test_for_winmdidl\test_for_winmdidl.winmd"

次の例に、操作が成功したことを示す winmdidl からのコンソール表示を示します。

Generating c:\users\giraffe\documents\\Test_for_winmdidl.idl

次に、midlrt が生成された IDL ファイルに実行されます。 .idl ファイルの名前の後に、metadata_dir 引数が指定されています。 \WinMetadata\ のパスが必要です。これは windows.winmd の場所です。

C:\Program Files (x86)\Microsoft Visual Studio 12.0> midlrt "c:\users\username\documents\test_for_winmdidl.idl" /metadata_dir "C:\Windows\System32\WinMetadata"

解説

winmdidl 操作からの出力ファイルは入力ファイルと同じ名前ですが、ファイル名拡張子が .idl です。

WRL からアクセスされる Windows ランタイム コンポーネントを開発している場合は、.idl および .h ファイルが各ビルドで生成されるように、winmdidl.exe と midlrt.exe をビルド後のステップとして実行するように指定できます。 例については、「Windows ランタイム コンポーネントでイベントを生成する」を参照してください。