Помогите подключить dll в VC6
От: Vold Россия  
Дата: 23.09.02 03:06
Оценка:
Помогите победить 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 высчитанную хэш-функцию файла.
Бьюсь уже неделю! Подскажите, что я неправильно делаю? Может библиотека битая?
Может у меня руки кривые?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.