(извините за мой плохой английский). У меня есть 2 вопроса о 64-битном программировании.
Мой код работал хорошо, но сегодня я получаю сообщение об ошибке (без компиляции или анализа кода). И это случайно. Например, иногда код работает, иногда нет. Когда я открываю исполняемый файл внутри WinDbg, мой код всегда получает ошибку. Я думаю, что это проблема с приведением 64-битного типа.
Пример кода:
DWORD hash_string_len = 0;
hash_string_len = (DWORD)strlen(hash_string); //hash_string is 32 character hash (A998B0FE08AB295072965B5A4B0C835E)
if (hash_string_len != (DWORD)(MD5_DIGEST_LENGTH * 2)) //MD5_DIGEST_LENGTH (#define MD5_DIGEST_LENGTH 16)
{
debug_this(); //printf("%d\n",__LINE__)
HeapFree(GetProcessHeap(), 0, ENGINE_HASHLIST_MD5_ENTRY);
return FALSE;
}
Без кода WinDbg не печатайте ошибку (методом debug_this ()), но внутри кода WinDbg выведите номер строки (причина:hash_string_len! = 32) но я знаю hash_string_len = 32, поэтому я думаю, что это проблема 64-битного усечения. Кто-нибудь может мне помочь?
Мой второй вопрос:
Может ли это привести к ошибке в 64-битном программировании?
DWORD a = 0;
some_func(&a);
some_func(PDWORD pA)
{
*pA = 1;
}
Поскольку я использую много кодов, подобных этому, внутри моегопроект. Вот так.
LZMA Lib
SRes LzmaDec_DecodeToBuf(CLzmaDec *p, Byte *dest, SizeT *destLen,
const Byte *src, SizeT *srcLen, ELzmaFinishMode finishMode, ELzmaStatus *status);
Я называю эту функцию вот так.
DWORD destLen = 0;
PBYTE dest = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,(SIZE_T)1024);
LzmaDec_DecodeToBuf(...,dest,&destLen,...)
Так что у меня действительно есть проблема с функциями в 64-битном программировании. Спасибо за чтение