Metodo ICorProfilerInfo2::GetClassLayout
Ottiene le informazioni sul layout, in memoria, dei campi definiti dalla classe specificata. In altri termini, questo metodo ottiene gli offset dei campi della classe.
HRESULT GetClassLayout(
[in] ClassID classID,
[in, out] COR_FIELD_OFFSET rFieldOffset[],
[in] ULONG cFieldOffset,
[out] ULONG *pcFieldOffset,
[out] ULONG *pulClassSize);
Parametri
classID
[in] ID della classe per la quale verrà recuperato il layout.rFieldOffset
[in, out] Matrice di strutture COR_FIELD_OFFSET, ognuna delle quali contiene i token e gli offset dei campi della classe.cFieldOffset
[in] Dimensione della matrice rFieldOffset.pcFieldOffset
[out] Puntatore al numero complessivo di elementi disponibili. Se il parametro cFieldOffset è 0, questo valore indica il numero degli elementi necessari.pulClassSize
[out] Puntatore a una posizione che contiene la dimensione, in byte, della classe.
Note
Il metodo GetClassLayout restituisce solo i campi definiti dalla classe stessa. Se anche la classe padre della classe ha definito alcuni campi, il profiler deve chiamare il metodo GetClassLayout sulla classe padre per ottenere quei campi.
Se si utilizza GetClassLayout con le classi di stringa, il metodo avrà esito negativo con codice di errore E_INVALIDARG. Utilizzare ICorProfilerInfo2::GetStringLayout per ottenere informazioni sul layout di una stringa. GetClassLayout avrà esito negativo anche quando chiamato con una classe della matrice.
Dopo il completamento del metodo GetClassLayout, è necessario verificare se il buffer rFieldOffset fosse abbastanza grande per contenere tutte le strutture COR_FIELD_OFFSET disponibili. A tal fine, confrontare il valore al quale punta il parametro pcFieldOffset con la dimensione del parametro rFieldOffset diviso la dimensione di una struttura COR_FIELD_OFFSET. Se il parametro rFieldOffset non è abbastanza grande, allocare un buffer rFieldOffset più grande, aggiornare cFieldOffset con la nuova dimensione e chiamare nuovamente il metodo GetClassLayout.
In alternativa, è possibile chiamare dapprima GetClassLayout con un buffer rFieldOffset di lunghezza zero per ottenere la dimensione del buffer corretta. È quindi possibile impostare la dimensione del buffer sul valore restituito nel parametro pcFieldOffset e chiamare nuovamente il metodo GetClassLayout.
Per ulteriori informazioni su questi due approcci, vedere Convenzioni dei metodi dell'API di profilatura.
Requisiti
Piattaforme: vedere Requisiti di sistema di .NET Framework.
Intestazione: CorProf.idl, CorProf.h
Libreria: CorGuids.lib
Versioni di .NET Framework: 4, 3.5 SP1, 3.5, 3.0 SP1, 3.0, 2.0 SP1, 2.0