指定されたアンマネージ関数呼び出しを共通言語ランタイム (CLR: Common Language Runtime) がインライン展開できるかどうかを、ホストが指定できるようにします。
HRESULT CallNeedsHostHook (
[in] SIZE_T target,
[out] BOOL *pbCallNeedsHostHook
);
パラメーター
target
[入力] 呼び出されるアンマネージ関数の、割り当てられているポータブル実行可能 (PE) ファイル内のアドレス。pbCallNeedsHostHook
[出力] 呼び出しをフックすることをホストが要求しているかどうかを示すブール値へのポインター。
戻り値
HRESULT |
説明 |
---|---|
S_OK |
CallNeedsHostHook が正常に終了しました。 |
HOST_E_CLRNOTAVAILABLE |
CLR がプロセスに読み込まれていません。または、CLR がマネージ コードを実行できない状態か、呼び出しを正常に処理できない状態にあります。 |
HOST_E_TIMEOUT |
呼び出しがタイムアウトしました。 |
HOST_E_NOT_OWNER |
呼び出し元がロックを所有していません。 |
HOST_E_ABANDONED |
ブロックされたスレッドまたはファイバーが待機しているイベントがキャンセルされました。 |
E_FAIL |
未知の重大エラーが発生しました。 メソッドから E_FAIL が返された場合、そのプロセス内では CLR を使用できなくなります。 ホスト メソッドへの後続の呼び出しは、HOST_E_CLRNOTAVAILABLE を返します。 |
解説
コードの実行を容易に最適化できるように、CLR はコンパイル中に各プラットフォーム呼び出しを分析して、呼び出しをインライン展開できるかどうかを判断します。 CallNeedsHostHook を使用すると、ホストはアンマネージ関数への呼び出しをフックすることを要求して、共通言語ランタイムによるその判断をオーバーライドできます。 ホストがフックを要求すると、ランタイムは呼び出しをインライン展開しません。
一般に、ホストが浮動小数点状態を調整する必要がある場合や、呼び出しによって、メモリや取得されたロックに対するランタイムの要求をホストが追跡できない状態になるという通知を受け取った場合に、ホストはフックを要求します。 ホストが呼び出しをフックすることを要求すると、ランタイムは EnterRuntime、LeaveRuntime、ReverseEnterRuntime、および ReverseLeaveRuntime の呼び出しを使用して、マネージ コード間での移行についてホストに通知します。
必要条件
プラットフォーム: 「.NET Framework システム要件」を参照
ヘッダー : MSCorEE.h
ライブラリ: MSCorEE.dll にリソースとして格納されていること
.NET Framework のバージョン: 4、3.5 SP1、3.5、3.0 SP1、3.0、2.0 SP1、2.0