|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
07.03.2009, 21:54 | #1 |
я не ~
Пользователь
Регистрация: 19.09.2008
Сообщений: 58
|
выгрузка длл
вобщем такая проблемка: я написал свою длл, в которой происходят опред. процесы в ходе всей работы чужей_программы. Подгружаеться моя длл из самой этой проги, тоесть у нее есть конфиг_файл вкотором я указываю путь к свой длл. Таким вот образам чужая программа загружает в свой процес мою длл.
Теперь вопрос: как акуратно выгрузить свою длл(из себя же), чтоб чужая програма не прекратила ход работы. |
08.03.2009, 00:50 | #2 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Ну сегодня прям какой-то день извращенцев =) Создать поток в программе, загрузившей DLL, в нём вызвать FreeLibrary.
Сама себя библиотека выгрузить не сможет, т.к. на вершине стека после вызова FreeLibrary останется адрес, указывающий на область памяти, которая уже освобождена (читай "чужая") и вся программа завалится с access violation. Теоретически можно подменить адрес возврата на валидный, но для этого надо перехатывать FreeLibrary. -- А, кстати, можно "опред. процесы", происходящие в DLL засунуть в ней в отдельный поток, тогда из него же можно будет вызвать FreeLibraryAndExitThread, который завершит поток и корректно выгрузит библиотеку.
пыщь
Последний раз редактировалось JTG; 08.03.2009 в 00:58. |
08.03.2009, 01:03 | #3 | |
я не ~
Пользователь
Регистрация: 19.09.2008
Сообщений: 58
|
JTG
вы собсно разъяснили суть проблемы, а вот решение не совсем: Цитата:
добавил FreeLibraryAndExitThread - во это я уже пробывал но у программы проподает главное окно, а процес остаеться, или я чтото не так делал? Зы: второй параметр передовал ноль Последний раз редактировалось user_jasser; 08.03.2009 в 01:10. |
|
08.03.2009, 01:19 | #4 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
Код в dll засунь в отдельный поток
Код:
пыщь
Последний раз редактировалось JTG; 08.03.2009 в 01:25. |
08.03.2009, 01:38 | #5 |
я не ~
Пользователь
Регистрация: 19.09.2008
Сообщений: 58
|
JTG
неа, вылитает с ошибкой "память не может быть read". возможно что в моем коде еще мешает нодо проверять. спсб |
10.03.2009, 14:02 | #6 | |
я не ~
Пользователь
Регистрация: 19.09.2008
Сообщений: 58
|
Еще вопросик: вобщем я в своей длл подменяю CallBack ф-ию главного окна чужей_проги..
Код:
Код:
Зы: собсно и из-за этого и происходят верталеты.. Цитата:
|
|
10.03.2009, 14:09 | #7 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
в своей оконной функции(NewProc) надо вызывать CallWindowProc.
и привести код в студию ещё не помешает. |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
ДЛЛ на gcс | Иллидан | Общие вопросы C/C++ | 1 | 12.10.2008 22:11 |
Про формы в длл | Altera | Общие вопросы Delphi | 2 | 24.06.2008 22:19 |
Экспорт класса из ДЛЛ | SunKnight | Общие вопросы Delphi | 2 | 21.05.2008 19:31 |
Фрэймы из ДЛЛ | SunKnight | Общие вопросы Delphi | 4 | 06.01.2008 16:32 |
Использование длл | Anatolij | Win Api | 1 | 02.01.2007 19:54 |