|
|
| Посл.отвђт | Сообщен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 |
|
|
Дата: Авг 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 |