Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Récupère la disposition des variables locales pour un ensemble de méthodes.
Syntaxe
int GetLocalVariablelayout(
uint ulAppDomainID,
Guid guidModule,
uint cMethods,
int[] rgMethodTokens,
out IStream pStreamLayout
);
Paramètres
ulAppDomainID
[in] Identificateur du domaine d’application.
guidModule
[in] Identificateur unique du module.
cMethods
[in] Nombre de jetons de méthode dans le rgMethodTokens
tableau.
rgMethodTokens
[in] Tableau de jetons de méthode.
pStreamLayout
[out] Flux de texte qui contient la disposition des variables.
Valeur de retour
En cas de réussite, retourne S_OK
, sinon, retourne un code d'erreur.
Exemple
L’exemple suivant montre comment implémenter cette méthode pour un objet CDebugSymbolProvider qui expose l’interface 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;
}