· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Не подгружается DLL в win9x

Посл.отвђт Сообщенiе


Дата: Авг 15, 2003 15:31:03

Обращаюсь к своей библиотеке функциями LoadLibrary() и GetProcAddress().
В системе windows 2000 все работает нормально - инициалицационная функция библиотеки отрабатывает, и LoadLibrary() возвращает ненулевое значение.
А в Windows 9X какие-то странности: в большинстве случаев функция инициализации не отрабатывает и, соответственно, LoadLibrary() возвращает NULL. А иногда и отрабатывает...
Причем, если подсунуть для программы какую-то другую DLL (из директории /SYSTEM/, например) то все нормально инициализируется (тоесть, скорее всего, ошибка не в программе, а в библиотеке).
Еще заметил, что если не использовать в своей библиотеке импорта (в инициализационной функции вывожу MessageBox), то тоже все идет нормально.
В чем могут быть проблемы?


Дата: Авг 15, 2003 15:41:32

lexx
Очень странно, но могу предположить, что на момент загрузки библиотеки MessageBox то есть user32 отсутствует в памяти.. (или не настроена таблица импорта)


Дата: Авг 15, 2003 22:37:39

lexx
Библиотека большая? Если нет, то цепляйте её сюда.


Дата: Авг 18, 2003 17:23:34

Вот они, исходники и бинирники.

1634079824__kbl.rar


Дата: Авг 18, 2003 21:14:38

lexx
@entry:
 STDCALL MessageBox,0,"Enter init function","Ok",MB_OK
 mov     eax,[esp+08h]
 cmp     eax,DLL_PROCESS_ATTACH
 jz      .DLL_ATTACH
 cmp     eax,DLL_PROCESS_DETACH
 jz      .DLL_DETACH
 STDCALL MessageBox,0,"OTHER","",MB_OK
 ret
 or      eax,eax
 jz      .DLL_DETACH
.DLL_ATTACH:
 STDCALL MessageBox,0,"ATTACH","",MB_OK
 xor     eax,eax
 dec     eax
 ret
.DLL_DETACH:
 STDCALL MessageBox,0,"DETACH","",MB_OK
 ret
Вы не учитываете, что @entry принимает 3 параметра (12 байт в стеке). Поэтому, вместо ret нужно писать retn 0Ch или retn 12. Вот и всё.


Дата: Авг 19, 2003 11:10:32

Да, действительно, все заработало.
Я это ЗНАЛ, и даже сначала использовал, но потом как-то перестал обращать внимание на высвобождение стека.

Спасибо.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.075