midl.exe 6およびmidl.exe 7とは異なる出力
-
19-08-2019 - |
質問
MSVCプロジェクトをVS 2005からVS 2008に変換するようにしています。これには、RPCに使用されるヘッダーとスタブを出力するIDLファイルが含まれています。 VS 2005プロジェクトはMIDL.exeバージョン6.00.0366を使用します。 VS 2008プロジェクトは、MIDL.exeバージョン7.00.0500を使用します。
問題は次のとおりです。MIDLv6は、サーバーコードに実装するために次のプロトタイプを出力します。
HRESULT PRC_Function(UINT input);
MIDL v7で同じコマンドラインを使用すると、このプロトタイプが出力されます:
HRESULT RPC_Function(handle_t IDL_handle, UINT input);
既存のすべての実装にhandle_tパラメーターを追加する必要はありません。 (さらに、しばらくの間、VS 2005でコンパイルするための実装が必要です。)
質問:MIDL.exe v7でv6と同じRPCサーバープロトタイプを出力するにはどうすればよいですか?
解決
自分の質問に答えられるようです...
MIDL v6は、サーバープロトタイプのハンドルタイプをauto_handleに自動的にデフォルト設定するようです。 MIDL v7はサポートしていないため、解決策は、auto_handle設定を含むServer.aclファイルを使用することです。これにより、MIDL v6とv7で同じ関数プロトタイプを持つServer.hファイルが出力されます。
ただし、<!> quot; auto_handle <!> quot;を示す警告も出力します。減価償却されました。代わりにimplicit_handle(handle_t IDL_handle)を使用しました。
このサイトでは、自分の質問に答えるためのバッジが与えられません。自分の回答に正しい回答のフラグを立てることもできません。
他のヒント
handle_t IDL_handleは、明示的なRPCバインディングハンドル用です。サーバー側では、さまざまなRPC関数を介して偽装のために呼び出し側クライアントのトークンをプルするなどのクールなことを実行できますが、使用する必要がない場合は、参照されないパラメーター(UNREFERENCED_PARAMETER (IDL_handle);)。暗黙的なバインディングハンドルは廃止されたようです。
クライアント側では、IDL_handleパラメーターにRPCサーバーにバインドするときに取得するバインドハンドルを使用します。