![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 586 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Практически все приложения используют ExitProcess. В том числе приложения, скомпилированные в C++ Builder и Delphi. Это сообщение отредактировал(а) 586 - 1.8.2010, 10:09 |
|||
|
||||
| HellStranger |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 1.9.2009 Репутация: нет Всего: -1 |
Ну сам по себе вызов LoadLibrary никаких дополнительных потоков не создаёт, если конечно в обработчике DLL_PROCESS_ATTACH этой библиотеки не стоит CreateThread/_beginthreadex... Вы подробнее описать проблему не можете?.. Да и вообще давайте рассуждать логически: если функия потока создаваемого потока (извиняюсь за масло масленное) находится в DLL, и при её выгрузке поток корректно не завершается и продолжает работать, то сразу же должен вылетать access violation. Так как образ DLL уже отгружен от адресного пространства вашего процесса. MSHTML.DLL вряд-ли так криво реализована... Ну уж очень нестандартное решение... ))))))))) Contains processor-specific register data. The system uses CONTEXT structures to perform various internal operations. Refer to the header file WinNT.h for definitions of this structure for each processor architecture. Не обращали внимания на эту идиотскую по-вашему мнению информацию из MSDN?.. ))))))))) А вот вам:
Где поле поле регистра Eip?.. Или под каждую архитектуру своё завершение писать?.. Пока ещё такого не было, но всё-таки соглашусь с Abyx: вы бредите. Хотя подход безусловно интересный, но не нестандартный, а нерабочий... Это сообщение отредактировал(а) HellStranger - 2.8.2010, 14:07 |
||||
|
|||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
HellStranger, у вас по умолчанию платформа xeon? у меня - по умолчанию x86-32
какбэ в WinNT.h нужная структура CONTEXT выбирается дефайнами (#ifdef). Это сообщение отредактировал(а) Abyx - 2.8.2010, 14:10 |
|||
|
||||
| HellStranger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 1.9.2009 Репутация: нет Всего: -1 |
Вы, наверное, слепые или просто далеки от мысли... Я привёл пример структуры CONTEXT под архитектурой, где указанного поля регистра EIP просто напросто нет, тем самым указав аппаратную зависимость решения, предложенного 12usver12. Или вы у нас настолько продвинутый программист, что под каждый процессор пишите отдельно, но используете при этом cpp?.. "ОЧЕНЬ УМНЫЙ" ПОДХОД! Удачи в вашем нелёгком (читать по-другому... Добавлю только, что вместо того, чтобы ответить на мою просьбу уточнить суть проблемы, вы начинаете искать повод превратить тему в балаган, делаю вывод, что вы баба базарная... И всё-же, посоветую вам для решения проблемы прочесть Рихтера главы 19 и в особенности 20, где, я уверен, ваша проблема описана и решена. Это сообщение отредактировал(а) HellStranger - 2.8.2010, 14:36 |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
HellStranger, вы такой забавный) пишите еще
естественно использование регистра eip - это платформозависимое решение, это только x86-32. это очевидная вещь же. проблема поднятая в этой теме полностью раскрыта в этой теме, и уточнять там нечего. в конце концов вы сами можете воспроизвести ситуацию вызвав LoadLibrary("MSHTML.DLL") под отладчиком |
|||
|
||||
| HellStranger |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 107 Регистрация: 1.9.2009 Репутация: нет Всего: -1 |
К вашему сведению EIP-регистр общего назначения, присутствующий во всей архитектуре IA-32/64 (в том числе и в XEON), и всё-же решение на его основе даже для данной платформы не подходят. Вы тоже забавный, настолько, что отвечать на ваши посты я смысла больше не вижу... Сам шучу- сам смеюсь это про вас... |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
HellStranger, я открою вам страшную тайну, первая буква в Eip говорит что это только x32, и никак не x64. там он называется Rip
|
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 16 Всего: 39 |
А кто сказал что по FreeLibrary билиотека будет выгружена из адресного пространства по DLL_PROCESS_DETACH, если вернем false то DLL не будет выгружена? Может бы все проще ? Автор не вызвал нужные функции для закрытия всех ресурсов ? -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
||||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
А можно узнать, зачем звать LoadLibrary("MSHTML.DLL") когда можно (и нужно) просто создать COM объект (один из поддерживаемых ею)? Возможно она (MSHTML.DLL) не рассчитана на то, что ее будет грузить НЕ COM менеджер?
|
|||
|
||||
| Abyx |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 601 Регистрация: 3.11.2009 Репутация: 2 Всего: 10 |
xvr, вообще-то создание ком-объекта сопровождается загрузкой библиотеки.
COM менеджер - это что? посмотрите реализацию CoCreateInstance %) там есть LoadLibrary алсо она рассчитана на то что ее будут грузить не-COM менеджер |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Да, упоминания в MSDN есть. А в примерах от MS ( http://www.microsoft.com/downloads/details...;displaylang=en / Htmldlg.exe) тоже остаются нитки при завершении? |
||||
|
|||||
| icecrashldr |
|
|||
![]() Developer ![]() Профиль Группа: Участник Сообщений: 122 Регистрация: 5.7.2010 Репутация: нет Всего: нет |
Abyx, Используйте ExitProcess, и не слушайте ШКОЛАТУ!
SetThreadContext(утечка памяти pending kernel services, а на WaitFor**** это вообще полный бред) TerminateThread - прямая утечка памяти(минимум Не корректное освобождения стека, + pending kernel services). Использования FreeLibrary есть очень плохо во вногих местах. При использовании FreeLibrary, вы должны быть уверены, что кроме вашего кода его не кто не использует, и в библиотеке не был создан поток. |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |