Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mendapatkan informasi resolusi titik henti yang menjelaskan titik henti ini.
Sintaks
int GetResolutionInfo(
enum BPRESI_FIELDS dwFields,
BP_RESOLUTION_INFO[] pBPResolutionInfo
);
Parameter
dwFields
[di] Kombinasi bendera dari enumerasi BPRESI_FIELDS yang menentukan bidang pBPResolutionInfo parameter mana yang akan diisi.
pBPResolutionInfo
[out] Struktur BP_RESOLUTION_INFO yang akan diisi dengan informasi tentang titik henti ini.
Tampilkan Nilai
Jika berhasil, tampilkan S_OK; jika tidak tampilkan kode galat.
Contoh
Contoh berikut mengimplementasikan metode ini untuk objek sederhana CDebugBreakpointResolution yang mengekspos antarmuka IDebugBreakpointResolution2 .
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;
}