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 Informationen zur Fehlerauflösung des Haltepunkts ab.
Syntax
int GetResolutionInfo(
enum_BPERESI_FIELDS dwFields,
BP_ERROR_RESOLUTION_INFO[] pErrorResolutionInfo
);
Parameter
dwFields
[in] Eine Kombination von Flags aus der BPERESI_FIELDS Enumeration, die bestimmt, welche Felder pErrorResolutionInfo ausgefüllt werden sollen.
pErrorResolutionInfo
[in, out] Die BP_ERROR_RESOLUTION_INFO Struktur, die mit der Beschreibung der Haltepunktauflösung gefüllt ist.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK, andernfalls ein Fehlercode zurückgegeben.
Beispiel
Im folgenden Beispiel wird diese Methode für ein einfaches CDebugErrorBreakpointResolution Objekt implementiert, das die IDebugErrorBreakpointResolution2-Schnittstelle verfügbar macht.
HRESULT CDebugErrorBreakpointResolution::GetResolutionInfo(
BPERESI_FIELDS dwFields,
BP_ERROR_RESOLUTION_INFO* pBPErrorResolutionInfo)
{
HRESULT hr;
if (pBPErrorResolutionInfo)
{
// Copy the specified fields of the request information from the class member
// variable to the local BP_ERROR_RESOLUTION_INFO variable.
hr = CopyBP_ERROR_RESOLUTION_INFO(m_bpErrorResolutionInfo,
*pBPErrorResolutionInfo,
dwFields);
}
else
{
hr = E_INVALIDARG;
}
return hr;
}
HRESULT CDebugErrorBreakpointResolution::CopyBP_ERROR_RESOLUTION_INFO(
BP_ERROR_RESOLUTION_INFO& bpResSrc,
BP_ERROR_RESOLUTION_INFO& bpResDest,
DWORD dwFields)
{
HRESULT hr = S_OK;
// Start with a raw copy.
memcpy(&bpResDest, &bpResSrc, sizeof(BP_ERROR_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 BPERESI_BPRESLOCATION flag
// is set in BPERESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPERESI_BPRESLOCATION))
{
// Switch 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 BPERESI_BPRESLOCATION flag of the BPERESI_FIELDS
// in the destination BP_ERROR_RESOLUTION_INFO.
ClearFlag(bpResDest.dwFields, BPERESI_BPRESLOCATION);
break;
}
}
}
// AddRef the IDebugProgram2 if the BPRESI_PROGRAM flag is set in the BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPERESI_PROGRAM))
{
bpResDest.pProgram->AddRef();
}
// AddRef the IDebuThread2 if the BPRESI_THREAD flag is set in the BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPERESI_THREAD))
{
bpResDest.pThread->AddRef();
}
// Check if the BPERESI_MESSAGE flag is set in the BPRESI_FIELDS.
if (IsFlagSet(bpResDest.dwFields, BPERESI_MESSAGE))
{
// Copy the source bstrMessage into the destination bstrMessage.
bpResDest.bstrMessage = SysAllocString(bpResSrc.bstrMessage);
// Clear the destination flag if there is no message.
if (!bpResDest.bstrMessage)
{
ClearFlag(bpResDest.dwFields, BPERESI_MESSAGE);
}
}
return hr;
}