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.
Ruft die Haltepunktauflösungsinformationen ab, die diesen Haltepunkt beschreiben.
Syntax
int GetResolutionInfo(
enum BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO[] pBPResolutionInfo
);
Parameter
dwFields
[in] Eine Kombination von Flags aus der BPRESI_FIELDS-Aufzählung , die bestimmt, welche Felder des pBPResolutionInfo Parameters ausgefüllt werden sollen.
pBPResolutionInfo
[out] Die BP_RESOLUTION_INFO Struktur, die mit Informationen zu diesem Haltepunkt ausgefüllt werden soll.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK zurückgegeben, andernfalls ein Fehlercode.
Beispiel
Im folgenden Beispiel wird diese Methode für ein einfaches CDebugBreakpointResolution Objekt implementiert, das die IDebugBreakpointResolution2-Schnittstelle verfügbar macht.
HRESULT CDebugBreakpointResolution::GetResolutionInfo(
BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO* pBPResolutionInfo)
{
HRESULT hr;
if (pBPResolutionInfo)
{
// Copy the specified fields of the request information from the class
// member variable to the local BP_RESOLUTION_INFO variable.
hr = CopyBP_RESOLUTION_INFO(m_bpResolutionInfo,
*pBPResolutionInfo,
dwFields);
}
else
{
hr = E_INVALIDARG;
}
return hr;
}
HRESULT CDebugBreakpointResolution::CopyBP_RESOLUTION_INFO(
BP_RESOLUTION_INFO& bpResSrc,
BP_RESOLUTION_INFO& bpResDest,
DWORD dwFields)
{
HRESULT hr = S_OK;
// Start with a raw copy.
memcpy(&bpResDest, &bpResSrc, sizeof(BP_RESOLUTION_INFO));
// The fields in the destination is the result of the AND of
// bpInfoSrc.dwFields and dwFields.
bpResDest.dwFields = dwFields & bpResSrc.dwFields;
// Fill in the bp location information if the BPRESI_BPRESLOCATION
// flag is set in BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPRESI_BPRESLOCATION))
{
// Switch based on the BP_TYPE.
switch (bpResSrc.bpResLocation.bpType)
{
case BPT_CODE:
{
// AddRef the IDebugCodeContext2 of the BP_RESOLUTION_CODE structure.
bpResDest.bpResLocation.bpResLocation.bpresCode.pCodeContext->AddRef();
break;
}
case BPT_DATA:
{
// Copy the bstrDataExpr, bstrFunc, and bstrImage of the
// BP_RESOLUTION_DATA structure.
bpResDest.bpResLocation.bpResLocation.bpresData.bstrDataExpr =
SysAllocString(bpResSrc.bpResLocation.bpResLocation.bpresData.bstrDataExpr);
bpResDest.bpResLocation.bpResLocation.bpresData.bstrFunc =
SysAllocString(bpResSrc.bpResLocation.bpResLocation.bpresData.bstrFunc);
bpResSrc.bpResLocation.bpResLocation.bpresData.bstrImage =
SysAllocString(bpResSrc.bpResLocation.bpResLocation.bpresData.bstrImage);
break;
}
default:
{
assert(FALSE);
// Clear the BPRESI_BPRESLOCATION flag in the BPRESI_FIELDS
// of the destination BP_RESOLUTION_INFO.
ClearFlag(bpResDest.dwFields, BPRESI_BPRESLOCATION);
break;
}
}
}
// AddRef the IDebugProgram2 if the BPRESI_PROGRAM flag is set in BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPRESI_PROGRAM))
{
bpResDest.pProgram->AddRef();
}
// AddRef the IDebugThread2 if the BPRESI_THREAD flag is set in BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPRESI_THREAD))
{
bpResDest.pThread->AddRef();
}
return hr;
}