IDebugBreakpointResolution2::GetResolutionInfo
获取描述此断点的断点解析信息。
语法
int GetResolutionInfo(
enum BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO[] pBPResolutionInfo
);
参数
dwFields
[in]BPRESI_FIELDS枚举中的标志的组合,用于确定要填写参数的pBPResolutionInfo
哪些字段。
pBPResolutionInfo
[out]要 填充此断点信息的BP_RESOLUTION_INFO 结构。
返回值
如果成功,则返回 S_OK
;否则,返回错误代码。
示例
以下示例为公开 IDebugBreakpointResolution2 接口的简单CDebugBreakpointResolution
对象实现此方法。
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;
}