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.
Konvertiert entweder einen Objektspeicherort oder eine 64-Bit-Speicheradresse in einen Speicherkontext.
Syntax
int GetMemoryContext64 (
IDebugField pField,
ulong uConstant,
out IDebugMemoryContext2 ppMemCxt
);
Parameter
pField
[in] Ein IDebugField , das das zu suchende Objekt beschreibt. Wenn NULL, verwenden Sie dwConstant stattdessen.
uConstant
[in] Eine 64-Bit-Speicheradresse, z. B. 0x50000000.
ppMemCxt
[out] Gibt die IDebugMemoryContext2-Schnittstelle zurück, die die Adresse des Objekts oder die Adresse im Arbeitsspeicher darstellt.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.
Beispiel
In den folgenden Beispielen wird ein Objekt erstellt, das die IDebugBinder3-Schnittstelle implementiert und diese Methode verwendet, um den Speicherkontext abzurufen.
HRESULT CValueProperty::GetMemoryContext ( IDebugMemoryContext2** out_ppMemoryContext )
{
// precondition
REQUIRE( NULL != out_ppMemoryContext );
if (NULL == out_ppMemoryContext)
return E_POINTER;
*out_ppMemoryContext = NULL;
INVARIANT( this );
if (!this->ClassInvariant())
return E_UNEXPECTED;
if (VT_EMPTY == this->m_VarValue.vt)
{
return E_FAIL;
}
// function body
if (NULL != this->m_pBinder)
{
UINT64 dwOffset = 0;
DEBUG_PROPERTY_INFO dpInfo;
HRESULT HR = this->GetPropertyInfo(DEBUGPROP_INFO_VALUE,
10, // RADIX
DEFAULT_TIMEOUT,
NULL,
0,
&dpInfo);
if (ENSURE( S_OK == HR ))
{
REQUIRE( NULL != dpInfo.bstrValue );
REQUIRE( NULL == dpInfo.bstrName );
REQUIRE( NULL == dpInfo.bstrFullName );
REQUIRE( NULL == dpInfo.bstrType );
REQUIRE( NULL == dpInfo.pProperty );
wchar_t * end;
dwOffset = _wcstoui64(dpInfo.bstrValue, &end, 0); // base 0 to allow 0x if it's ever output
::SysFreeString(dpInfo.bstrValue);
}
if (CComQIPtr<IDebugBinder3> binder3 = this->m_pBinder)
HR = binder3->GetMemoryContext64(NULL, dwOffset, out_ppMemoryContext);
else
HR = this->m_pBinder->GetMemoryContext(NULL, (DWORD)(__int32)dwOffset, out_ppMemoryContext);
if (ENSURE( S_OK == HR ))
{
REQUIRE( NULL != *out_ppMemoryContext );
}
}
// postcondition
INVARIANT( this );
HRESULT HR = E_FAIL;
if (NULL != *out_ppMemoryContext)
{
HR = S_OK;
}
return HR;
}