IDebugDocumentChecksum2::GetChecksumAndAlgorithmId
Ruft die Dokumentprüfsumme und den Algorithmusbezeichner ab, wenn die maximale Anzahl von Bytes verwendet werden soll.
Syntax
public int GetChecksumAndAlgorithmId(
out Guid pRetVal,
uint cMaxBytes,
out byte pChecksum,
out uint pcNumBytes
);
Parameter
pRetVal
[out] Eindeutiger Bezeichner für den Prüfsummenalgorithmus.
cMaxBytes
[in] Maximale Anzahl von Bytes, die für die Prüfsumme verwendet werden sollen.
pChecksum
[out] Wert der Prüfsumme.
pcNumBytes
[out] Die tatsächliche Anzahl von Bytes, die für die Prüfsumme verwendet werden.
Rückgabewert
Wenn die Ausführung erfolgreich ist, wird S_OK
, andernfalls ein Fehlercode zurückgegeben.
Beispiel
Im folgenden Beispiel wird diese Methode verwendet, um die Prüfsumme und den Algorithmus für ein Dokument abzurufen.
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 );
}