Здравствуйте Vold, Вы писали:
V>Помогите победить DLL
V>Здравствуйте! Я пишу на VC++ 6 и у меня возникла проблема с подключением длл.
V>С раньше основном работал с айпишными библиотеками, но там все делается на автомате и никаких особых проблем не возникало, а сейчас появилась необходимость расчитывать хэш-функцию файла используя библиотеку put_hash.dll (put_hash.h put_hash.lib)
V>При попытке подключить библиотеку статически, выдает сообщение «Заголовок .либ файла поврежден или не верен».
V>Тогда я попытался подключить функции динамически. Посмотрел пример из MSDN и начал:
V>typedef INT (*MYPROC)(LPTSTR);
V>typedef INT (*MYPROC2)(LPTSTR, LPTSTR, LPINT, LPINT);
Судя по тому, что написано в put_hash.h, правильный прототип будет
typedef INT (CALLBACK *MYPROC)(LPSTR);
typedef INT (CALLBACK *MYPROC2)(LPSTR, LPSTR, LPINT, LPINT);
V>HINSTANCE hDLL;
V>MYPROC ProcAdd;
V>MYPROC2 ProcAdd2;
V>lptstr pathname="d:\\test.htm";
V>lptstr hash;
V> hDLL=LoadLibrary("put_hash.dll");
V> if(hDLL!=NULL)
V> {
V> ProcAdd=(MYPROC)GetProcAddress(hDLL,"InitPUT_HASH");
Строчка ниже не выглядит как вызов функции по указателю.
V> (ProcAdd);
Правильно будет
(*ProcAdd)(); // C style
ProcAdd(); // C++ style
(ProcAdd)(); // no style but works
V> ProcAdd2=(MYPROC2)GetProcAddress(hDLL,"MakeHashFile");
V> (ProcAdd2)(pathname, hash, os_error, hash_error);
V> ProcAdd=(MYPROC)GetProcAddress(hDLL,"DonePUT_HASH");
V> (ProcAdd);
V> }
V> FreeLibrary(hDLL);
V>