Здравствуйте Vold, Вы писали:
V>Спасибо за подсказку! Так действительно правильно и функции хоть стали возвращать значения (возвращает 0, т.е. отсутствие ошибки), но основную задачу не выполняет :(
Вот этот код работает на моей системе: в szHash заносится нечто, похожее на хэш файла.
int
_tmain(
int argc,
_TCHAR * argv[]
)
{
HINSTANCE hInstance = LoadLibrary(_T("put_hash.dll"));
if (hInstance == NULL)
return -1;
INT (CALLBACK * pInitPUT_HASH)();
VOID (CALLBACK * pDonePUT_HASH)();
INT (CALLBACK * pMakeHashFile)(PCSTR, PCSTR, PINT, PINT);
*(FARPROC *)&pInitPUT_HASH = GetProcAddress(hInstance, "InitPUT_HASH");
*(FARPROC *)&pDonePUT_HASH = GetProcAddress(hInstance, "DonePUT_HASH");
*(FARPROC *)&pMakeHashFile = GetProcAddress(hInstance, "MakeHashFile");
if (pInitPUT_HASH == NULL ||
pDonePUT_HASH == NULL ||
pMakeHashFile == NULL)
return -1
INT nRet, nOsErr, nHashErr;
CHAR szHash[MAX_PATH];
nRet = pInitPUT_HASH();
if (nRet != 0)
return nRet;
nRet = pMakeHashFile("D:\\dxdiag.txt", szHash, &nOsErr, &nHashErr);
pDonePUT_HASH();
return nRet;
}
V>Все таки меня смущает разница ссылок на функции библиотеки (адрес который мне указывает дебагер и адрес который указан при быстром просмотре).
Не верь быстрому просмотру, верь depends.exe. Адрес InitPUT_HASH — 0x00003329 относительно адреса загрузки DLL.
V>При вызове основной функции MakeHashFile она опять таки возвращает ноль, но внизу в окне сообщений дебага выдает сообщение "First-chance exception in hash.exe: (KERNEL32.DLL): 0xC0000005: Access Violation"
Это может быть признаком ошибки, а может и не быть.