Re: Помогите подключить dll в VC6
От: Alex Fedotov США  
Дата: 23.09.02 03:53
Оценка:
Здравствуйте 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>
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.