Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wichtig
Seit Visual Studio 2015 ist diese Art der Implementierung von Ausdrucksauswertungen veraltet. Informationen zum Implementieren von CLR-Ausdrucksauswertungen finden Sie unter CLR-Ausdrucksauswertungen und Beispiel für die Auswertung verwalteter Ausdrücke.
Visual Studio ruft die GetDebugProperty -Methode (DE) des Debugmoduls auf, die wiederum GetMethodProperty aufruft, um Informationen über die aktuelle Methode im Stapelframe abzurufen.
Diese Implementierung führt IDebugExpressionEvaluator::GetMethodProperty die folgenden Aufgaben aus:
Ruft GetContainerField auf, und übergibt das IDebugAddress -Objekt. Der Symbolanbieter (SP) gibt ein IDebugContainerField zurück, das die Methode darstellt, die die angegebene Adresse enthält.
Ruft das IDebugMethodField aus dem
IDebugContainerField.Instanziiert eine Klasse (in diesem Beispiel aufgerufen
CFieldProperty), die die IDebugProperty2-Schnittstelle implementiert und dasIDebugMethodFieldvom SP zurückgegebene Objekt enthält.Gibt die
IDebugProperty2Schnittstelle aus demCFieldProperty-Objekt zurück.
Verwalteter Code
Dieses Beispiel zeigt eine Implementierung in IDebugExpressionEvaluator::GetMethodProperty verwaltetem Code.
namespace EEMC
{
[GuidAttribute("462D4A3D-B257-4AEE-97CD-5918C7531757")]
public class EEMCClass : IDebugExpressionEvaluator
{
public HRESULT GetMethodProperty(
IDebugSymbolProvider symbolProvider,
IDebugAddress address,
IDebugBinder binder,
int includeHiddenLocals,
out IDebugProperty2 property)
{
IDebugContainerField containerField = null;
IDebugMethodField methodField = null;
property = null;
// Get the containing method field.
symbolProvider.GetContainerField(address, out containerField);
methodField = (IDebugMethodField) containerField;
// Return the property of method field.
property = new CFieldProperty(symbolProvider, address, binder, methodField);
return COM.S_OK;
}
}
}
Nicht verwalteter Code
Dieses Beispiel zeigt eine Implementierung in IDebugExpressionEvaluator::GetMethodProperty nicht verwalteten Code.
[CPP]
STDMETHODIMP CExpressionEvaluator::GetMethodProperty(
in IDebugSymbolProvider *pprovider,
in IDebugAddress *paddress,
in IDebugBinder *pbinder,
in BOOL includeHiddenLocals,
out IDebugProperty2 **ppproperty
)
{
if (pprovider == NULL)
return E_INVALIDARG;
if (ppproperty == NULL)
return E_INVALIDARG;
else
*ppproperty = 0;
HRESULT hr;
IDebugContainerField* pcontainer = NULL;
hr = pprovider->GetContainerField(paddress, &pcontainer);
if (FAILED(hr))
return hr;
IDebugMethodField* pmethod = NULL;
hr = pcontainer->QueryInterface( IID_IDebugMethodField,
reinterpret_cast<void**>(&pmethod));
pcontainer->Release();
if (FAILED(hr))
return hr;
CFieldProperty* pfieldProperty = new CFieldProperty( pprovider,
paddress,
pbinder,
pmethod );
pmethod->Release();
if (!pfieldProperty)
return E_OUTOFMEMORY;
hr = pfieldProperty->Init();
if (FAILED(hr))
{
pfieldProperty->Release();
return hr;
}
hr = pfieldProperty->QueryInterface( IID_IDebugProperty2,
reinterpret_cast<void**>(ppproperty));
pfieldProperty->Release();
return hr;
}