1

MSVC プロジェクトを VS 2005 から VS 2008 に変換しようとしています。RPC に使用されるヘッダーとスタブを出力する IDL ファイルが含まれています。VS 2005 プロジェクトは、MIDL.exe バージョン 6.00.0366 を使用します。VS 2008 プロジェクトは、MIDL.exe バージョン 7.00.0500 を使用します。

問題は次のとおりです。MIDL v6 は、サーバー コードに実装する次のプロトタイプを出力します。

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 サーバー プロトタイプを出力するにはどうすればよいですか?

4

2 に答える 2

1

私は自分の質問に答えることができるように見えます...

MIDL v6 は、サーバー プロトタイプのハンドル タイプを auto_handle に自動的にデフォルト設定するようです。MIDL v7 はサポートしていないため、解決策は、auto_handle 設定を含む Server.acl ファイルを使用することです。これにより、MIDL v6 と v7 で同じ関数プロトタイプを含む Server.h ファイルが出力されます。

ただし、「auto_handle」が減価償却されていることを示す警告も出力します。代わりに、implicit_handle(handle_t IDL_handle) を使用しました。

残念ながら、このサイトでは自分の質問に答えてもバッジがもらえません。また、自分の回答を正解としてフラグ付けすることもできません。

于 2008-12-05T17:00:32.470 に答える
0

handle_t IDL_handle は、明示的な RPC バインディング ハンドル用です。サーバー側では、さまざまな RPC 関数を介してなりすましのために呼び出し元のクライアントのトークンをプルするなどのクールなことを行うことができますが、それを使用する必要がない場合は、参照されていないパラメーター (UNREFERENCED_PARAMETER) として設定するだけで問題ありません。 (IDL_ハンドル);)。暗黙のバインディング ハンドルは廃止されたようです。

クライアント側では、RPC サーバーにバインドするときに取得したバインディング ハンドルを IDL_handle パラメータに使用します。

于 2011-04-19T22:57:25.647 に答える