IDebugDocumentChecksum2::GetChecksumAndAlgorithmId
如需 Visual Studio 2017 的最新文件請參閱 Visual Studio 2017 文件。
擷取指定要使用的位元組數目上限的文件的總和檢查碼和演算法識別項。
語法
HRESULT GetChecksumAndAlgorithmId(
GUID *pRetVal,
ULONG cMaxBytes,
BYTE *pChecksum,
ULONG *pcNumBytes
);
public int GetChecksumAndAlgorithmId(
out Guid pRetVal,
uint cMaxBytes,
out byte pChecksum,
out uint pcNumBytes
);
參數
pRetVal
[out]總和檢查碼演算法的唯一識別碼。
cMaxBytes
[in]要用於總和檢查碼的位元組數目上限。
pChecksum
[out]總和檢查碼值。
pcNumBytes
[out]實際使用總和檢查碼的位元組數目。
傳回值
如果成功,傳回S_OK
; 否則傳回錯誤碼。
範例
下列範例會使用這個方法來取得總和檢查碼和文件的演算法。
HRESULT CDebugCodeContext::GetDocumentChecksumAndAlgorithmId(GUID *pguidAlgorithm, BYTE **ppChecksum, ULONG *pcNumBytes)
{
HRESULT hRes = E_FAIL;
*ppChecksum = NULL;
*pcNumBytes = 0;
CComPtr<IDebugDocumentContext2> pDocContext;
hRes = this->GetDocumentContext(&pDocContext);
if ( HREVAL(S_OK, hRes) )
{
CComQIPtr<IDebugDocumentChecksum2> pDocChecksum(pDocContext);
if ( pDocChecksum != NULL )
{
// Figure out the size of the checksum buffer required
ULONG cNumBytes = 0;
hRes = pDocChecksum->GetChecksumAndAlgorithmId(pguidAlgorithm, 0, NULL, &cNumBytes);
if ( S_OK == hRes )
{
// check to see if we got back valid values
if ( cNumBytes && GUID_NULL != (*pguidAlgorithm) )
{
// Alloc space for the checksum data
BYTE *pChecksum = (BYTE*) CoTaskMemAlloc(cNumBytes);
if ( pChecksum )
{
// Get the buffer containing the checksum info
hRes = pDocChecksum->GetChecksumAndAlgorithmId(pguidAlgorithm, cNumBytes, pChecksum, &cNumBytes);
if ( HREVAL(S_OK, hRes) )
{
*ppChecksum = pChecksum;
*pcNumBytes = cNumBytes;
}
else
{
CoTaskMemFree(pChecksum);
}
}
else
hRes = E_OUTOFMEMORY;
}
else
hRes = S_FALSE; // lang doesn't support checksums
}
else
hRes = S_FALSE; // failed to work out checksum info
}
else
hRes = S_FALSE; // SH doesn't support checksums
}
return ( hRes );
}