Metodo ICorDebugModule2::ApplyChanges
Applica le modifiche relative ai metadati e al codice MSIL (Microsoft Intermediate Language) al processo in esecuzione.
HRESULT ApplyChanges (
[in] ULONG cbMetadata,
[in, size_is(cbMetadata)] BYTE pbMetadata[],
[in] ULONG cbIL,
[in, size_is(cbIL)] BYTE pbIL[]
);
Parametri
cbMetadata
[in] Dimensione, in byte, dei metadati delta.pbMetadata
[in] Buffer che contiene i metadati delta. L'indirizzo del buffer viene restituito dal metodo IMetaDataEmit2::SaveDeltaToMemory.Gli indirizzi virtuali relativi (RVA, Relative Virtual Address) nei metadati devono essere relativi all'inizio del codice MSIL.
cbIL
[in] Dimensione, in byte, del codice MSIL delta.pbIL
[in] Buffer che contiene il codice MSIL aggiornato.
Note
Il parametro pbMetadata è in un formato speciale per metadati delta (come output di IMetaDataEmit2::SaveDeltaToMemory). pbMetadata prende metadati precedenti come base e descrive le singole modifiche da applicare alla base.
Il parametro pbIL[] invece contiene nuovo MSIL per il metodo aggiornato ed è concepito per sostituire completamente il precedente MSIL per quel metodo.
Quando il codice MSIL delta e i metadati vengono creati nella memoria del debugger, quest'ultimo chiama ApplyChanges per inviare le modifiche in Common Language Runtime. Il runtime aggiorna le relative tabelle dei metadati, inserisce il nuovo codice MSIL nel processo e imposta una compilazione JIT di tale codice. Una volta applicate le modifiche, il debugger deve chiamare il metodo IMetaDataEmit2::ResetENCLog per preparare la sessione di modifica successiva. Il debugger può quindi proseguire con il processo.
Ogni volta che il debugger chiama l'oggetto ApplyChanges su un modulo con metadati delta, deve chiamare anche il metodo IMetaDataEmit::ApplyEditAndContinue con gli stessi metadati delta su tutte le copie dei metadati di quel modulo di cui dispone, tranne la copia utilizzata per generare le modifiche. Se una copia dei metadati in qualche modo non è più sincronizzata con i metadati effettivi, il debugger può sempre eliminare tale copia e ottenerne una nuova.
Se il metodo ApplyChanges ha esito negativo, la sessione di debug verrà a trovarsi in uno stato non valido e dovrà essere riavviata.
Requisiti
Piattaforme: vedere Requisiti di sistema di .NET Framework.
Intestazione: CorDebug.idl, CorDebug.h
Libreria: CorGuids.lib
Versioni di .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0