Помогите победить DLL
Здравствуйте! Я пишу на VC++ 6 и у меня возникла проблема с подключением длл.
С раньше основном работал с айпишными библиотеками, но там все делается на автомате и никаких особых проблем не возникало, а сейчас появилась необходимость расчитывать хэш-функцию файла используя библиотеку
put_hash.dll (
put_hash.h put_hash.lib)
При попытке подключить библиотеку статически, выдает сообщение «Заголовок .либ файла поврежден или не верен».
Тогда я попытался подключить функции динамически. Посмотрел пример из MSDN и начал:
typedef INT (*MYPROC)(LPTSTR);
typedef INT (*MYPROC2)(LPTSTR, LPTSTR, LPINT, LPINT);
HINSTANCE hDLL;
MYPROC ProcAdd;
MYPROC2 ProcAdd2;
lptstr pathname="d:\\test.htm";
lptstr hash;
hDLL=LoadLibrary("put_hash.dll");
if(hDLL!=NULL)
{
ProcAdd=(MYPROC)GetProcAddress(hDLL,"InitPUT_HASH");
(ProcAdd);
ProcAdd2=(MYPROC2)GetProcAddress(hDLL,"MakeHashFile");
(ProcAdd2)(pathname, hash, os_error, hash_error);
ProcAdd=(MYPROC)GetProcAddress(hDLL,"DonePUT_HASH");
(ProcAdd);
}
FreeLibrary(hDLL);
Из put_hash.h
/*
pathname - полное имя файла
hash - значение хеш функции пpеобpазованное в стpоку в шестнадцатеpичном
фоpмате
os_error - код ошибки ОС или 0
hash_error - код ошибки функции или 0
Возвpат 0 - ОК
#0 - когда hash_error или os_error #0
*/
int PASCAL CALLBACK _export MakeHashFile(
lptstr pathname,
lptstr hash,
lpint os_error,
lpint hash_error);
В этом случае у меня появилась ошибка “Unhandled exception” при вызове функции MakeHashFile. Когда я посмотрел дллку через быстрый просмотр, оказалось что GetProcAddress возвращает адрес совсем другой функции! (т.е. Entry Point у InitPUT_HASH 0x0000e82c, а у @__lockDebuggerData$gv 0x00003329. GetProcAddress(hDLL,”InitPUT_HASH”) возвращает 0x00883329!)
Помучавшись, я стал задавать адреса напрямую:
ProcAdd=(MYPROC)0x0088e82c;
ProcAdd2=(MYPROC2)0x008856d4;
В этом случае все проходит нормально, ошибок нет, но и результата работы тоже нет!
По идее функция должна записывать в hash высчитанную хэш-функцию файла.
Бьюсь уже неделю! Подскажите, что я неправильно делаю? Может библиотека битая?
Может у меня руки кривые?