次の方法で共有


ICorDebugModule2::ApplyChanges メソッド

メタデータの変更と共通中間言語 (CIL) コードの変更を実行中のプロセスに適用します。

構文

HRESULT ApplyChanges (
    [in] ULONG                       cbMetadata,
    [in, size_is(cbMetadata)] BYTE   pbMetadata[],
    [in] ULONG                       cbIL,
    [in, size_is(cbIL)] BYTE         pbIL[]
);

パラメーター

cbMetadata [in]差分メタデータのサイズ (バイト単位)。

pbMetadata [in]デルタ メタデータを含むバッファー。 バッファーのアドレスは、IMetaDataEmit2::SaveDeltaToMemory メソッドから返されます。

メタデータ内の相対仮想アドレス (RVA) は、CIL コードの先頭からの相対アドレスである必要があります。

cbIL [in]デルタ CIL コードのサイズ (バイト単位)。

pbIL [in]更新された CIL コードを含むバッファー。

解説

pbMetadata パラメーターは、特別なデルタ メタデータ形式 (IMetaDataEmit2::SaveDeltaToMemory による出力) です。 pbMetadata では、以前のメタデータをベースとし、そのベースに適用する個々の変更を記述します。

これに対し pbIL[、] パラメーターには更新されたメソッドの新しい CIL が含まれており、そのメソッドの前の CIL を完全に置き換えることを意図しています

デルタ CIL とメタデータがデバッガーのメモリに作成されると、デバッガーは変更を共通言語ランタイム (CLR) に送信するために呼び出 ApplyChanges します。 ランタイムはメタデータ テーブルを更新し、新しい CIL をプロセスに配置し、新しい CIL の Just-In-Time (JIT) コンパイルを設定します。 変更が適用されると、デバッガーは IMetaDataEmit2::ResetENCLog を呼び出して、次の編集セッションの準備を行う必要があります。 デバッガーはプロセスを続行できます。

デバッガーは、デルタ メタデータを含むモジュールで ApplyChanges を呼び出すたびに、変更を出力するために使用されるコピーを除きそのモジュールのメタデータのすべてのコピーで、同じデルタ メタデータを使用して IMetaDataEmit::ApplyEditAndContinue も呼び出す必要があります。 メタデータのコピーが何らかの理由で実際のメタデータと非同期になる場合、デバッガーは常にそのコピーを破棄して新しいコピーを取得できます。

ApplyChanges メソッドが失敗した場合、デバッグ セッションは無効な状態になり、再起動する必要があります。

必要条件

:システム要件」を参照してください。

ヘッダー: CorDebug.idl、CorDebug.h

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 2.0 以降で使用可能