IDebugBreakpointChecksumRequest2::GetChecksum
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
擷取的中斷點要求指定總和檢查碼演算法的唯一識別項使用的文件總和檢查碼。
語法
HRESULT GetChecksum(
REFGUID guidAlgorithm,
CHECKSUM_DATA *pChecksumData
);
public int GetChecksum(
ref Guid guidAlgorithm,
out enum_CHECKSUM_DATA pChecksumData
);
參數
guidAlgorithm
[in]總和檢查碼演算法的唯一識別碼。
pChecksumData
[out]中斷點要求文件總和檢查碼。
傳回值
如果成功,傳回S_OK
; 否則傳回錯誤碼。
範例
下列範例會檢查是否有總和檢查碼的文件,也就是要繫結,符合其中一個從 UI 的函式。
bool CDebugProgram::DoChecksumsMatch(CDebugPendingBreakpoint *pPending, CDebugCodeContext *pContext)
{
bool fRet = false;
HRESULT hRes;
// Get the checksum for the document we are about to bind to from the pdb side
GUID guidAlgorithmId;
BYTE *pChecksum = NULL;
ULONG cNumBytes = 0;
hRes = pContext->GetDocumentChecksumAndAlgorithmId(&guidAlgorithmId, &pChecksum, &cNumBytes);
if ( S_OK == hRes )
{
// Get checksum data for the document from the UI (request) side
CComPtr<IDebugBreakpointChecksumRequest2> pChecksumRequest;
hRes = pPending->GetChecksumRequest(&pChecksumRequest);
if ( S_OK == hRes )
{
CHECKSUM_DATA data;
hRes = pChecksumRequest->GetChecksum(guidAlgorithmId, &data);
if ( S_OK == hRes )
{
if ( data.ByteCount == cNumBytes && memcmp(data.pBytes, pChecksum, cNumBytes) == 0 )
fRet = true;
else
fRet = false;
// Free up data allocated for checksum data
CoTaskMemFree(data.pBytes);
}
else
fRet = true; // checksums not available - user disabed checksums
}
else
fRet = true; // we couldn't get checksum from UI - default to past behavior
// free up space allocated for checksum from pdb
CoTaskMemFree(pChecksum);
}
else
fRet = true; // we don't have a checksum to compare with.
return ( fRet );
}