將中繼資料中的變更和通用中繼語言 (CIL) 程式碼中的變更套用至執行中的進程。
語法
HRESULT ApplyChanges (
[in] ULONG cbMetadata,
[in, size_is(cbMetadata)] BYTE pbMetadata[],
[in] ULONG cbIL,
[in, size_is(cbIL)] BYTE pbIL[]
);
參數
cbMetadata [在]差異中繼資料的大小 (以位元組為單位)。
pbMetadata [在]包含差異中繼資料的緩衝區。 緩衝區的位址會從 IMetaDataEmit2::SaveDeltaToMemory 方法傳回。
中繼資料中的相對虛擬位址 (RVA) 應該相對於 CIL 程式代碼的開頭。
cbIL [在]差異 CIL 程式碼的大小 (以位元組為單位)。
pbIL [在]包含更新 CIL 程式碼的緩衝區。
備註
參數 pbMetadata 採用特殊的差異中繼資料格式 ( IMetaDataEmit2::SaveDeltaToMemory) 輸出。
pbMetadata 以先前的中繼資料為基礎,並描述要套用至該基礎的個別變更。
相反地, pbIL[] 參數包含已更新方法的新 CIL,而且旨在完全取代該方法的先前 CIL
在偵錯工具的記憶體中建立差異 CIL 和中繼資料時,偵錯工具會呼叫 ApplyChanges 將變更傳送至共用語言執行階段 (CLR) 。 執行階段會更新其中繼資料表、將新的 CIL 放入進程中,並設定新 CIL 的 Just-In-Time (JIT) 編譯。 套用變更時,偵錯工具應該呼叫 IMetaDataEmit2::ResetENCLog ,以準備下一個編輯會話。 偵錯工具接著可以繼續程式。
每當偵錯工具呼叫 ApplyChanges 具有差異中繼資料的模組時,它也應該在其模組中繼資料的所有複本上呼叫 IMetaDataEmit::ApplyEditAndContinue ,並使用相同的差異中繼資料,但用來發出變更的複本除外。 如果中繼資料的複本以某種方式與實際中繼資料不同步,偵錯工具一律可以捨棄該複本並取得新的複本。
如果方法 ApplyChanges 失敗,則偵錯會話會話處於無效狀態,必須重新啟動。
需求
平台: 請參閱 .NET 支援的作業系統。
標題: CorDebug.idl、CorDebug.h
圖書館: CorGuids.lib
.NET 版本: 自 .NET Framework 2.0 起提供