Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengambil tata letak variabel lokal untuk sekumpulan metode.
Sintaks
int GetLocalVariablelayout(
uint ulAppDomainID,
Guid guidModule,
uint cMethods,
int[] rgMethodTokens,
out IStream pStreamLayout
);
Parameter
ulAppDomainID
[di] Pengidentifikasi domain aplikasi.
guidModule
[di] Pengidentifikasi unik modul.
cMethods
[di] Jumlah token metode dalam rgMethodTokens array.
rgMethodTokens
[di] Array token metode.
pStreamLayout
[out] Aliran teks yang berisi tata letak variabel.
Tampilkan Nilai
Jika berhasil, mengembalikan S_OK; jika tidak, mengembalikan kode galat.
Contoh
Contoh berikut menunjukkan cara menerapkan metode ini untuk objek CDebugSymbolProvider yang mengekspos antarmuka IDebugComPlusSymbolProvider .
HRESULT CDebugSymbolProvider::GetLocalVariablelayout(
ULONG32 ulAppDomainID,
GUID guidModule,
ULONG32 cMethods,
_mdToken rgMethodTokens[],
IStream** ppStreamLayout)
{
HRESULT hr = S_OK;
METHOD_ENTRY(CDebugSymbolProvider::GetLocalVariablelayout);
CComPtr<ISymUnmanagedReader> symReader;
IfFailRet(GetSymUnmanagedReader(ulAppDomainID, guidModule, (IUnknown **) &symReader));
CComPtr<IStream> stream;
IfFailRet(CreateStreamOnHGlobal(NULL, true, &stream));
for (ULONG32 iMethod = 0; iMethod < cMethods; iMethod += 1)
{
CComPtr<ISymUnmanagedMethod> method;
IfFailRet(symReader->GetMethod(rgMethodTokens[iMethod], &method));
CComPtr<ISymUnmanagedScope> rootScope;
IfFailRet(method->GetRootScope(&rootScope));
//
// Add the method's variables to the stream
//
IfFailRet(AddScopeToStream(rootScope, 0, stream));
// do end of method marker
ULONG32 depth = 0xFFFFFFFF;
ULONG cb = 0;
IfFailRet(stream->Write(&depth, sizeof(depth), &cb));
}
LARGE_INTEGER pos;
pos.QuadPart = 0;
IfFailRet(stream->Seek(pos, STREAM_SEEK_SET, 0));
*ppStreamLayout = stream.Detach();
METHOD_EXIT(CDebugSymbolProvider::GetLocalVariablelayout, hr);
return hr;
}