Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LoadLibrary("MSHTML.DLL") создает поток 
:(
    Опции темы
586
Дата 1.8.2010, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Abyx @  1.8.2010,  10:55 Найти цитируемый пост)
я знаю что рантайм вызывает ExitProcess  =) 
иногда это очень раздражает, когда хочешь чтобы main() завершилась, а другие потоки продолжали работать
но тут как раз противоположный случай

Практически все приложения используют ExitProcess. В том числе приложения, скомпилированные в C++ Builder и Delphi.

Это сообщение отредактировал(а) 586 - 1.8.2010, 10:09
PM   Вверх
HellStranger
Дата 2.8.2010, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: нет
Всего: -1



Цитата(Abyx @  31.7.2010,  13:57 Найти цитируемый пост)
вызов LoadLibrary("MSHTML.DLL") создает потокего можно как-то корректно прибить?FreeLibrary не помогает %)


Ну сам по себе вызов LoadLibrary никаких дополнительных потоков не создаёт, если конечно в обработчике DLL_PROCESS_ATTACH этой библиотеки не стоит CreateThread/_beginthreadex... Вы подробнее описать проблему не можете?..
Да и вообще давайте рассуждать логически: если функия потока создаваемого потока (извиняюсь за масло масленное) находится в DLL, и при её выгрузке поток корректно не завершается и продолжает работать, то сразу же должен вылетать access violation. Так как образ DLL уже отгружен от адресного пространства вашего процесса. MSHTML.DLL вряд-ли так криво реализована...

Цитата(12usver12 @  31.7.2010,  16:42 Найти цитируемый пост)
еще из этой оперы. SuspendThread -> GetThreadContext -> eip = adrExitThread -> SetThreadContext-> ResumeThread это нестандартное решение нестандартной задачи - если оно вам кажется бредом - это ваши проблемы


Ну уж очень нестандартное решение... )))))))))

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?.. )))))))))

А вот вам:

Код

Description of CONTEXT structure from winnt.h (Windows Server 2003 + Xeon chip)
typedef struct {
double Fpr0;
double Fpr1;
double Fpr2;
double Fpr3;
double Fpr4;
double Fpr5;
double Fpr6;
double Fpr7;
double Fpr8;
double Fpr9;
double Fpr10;
double Fpr11;
double Fpr12;
double Fpr13;
double Fpr14;
double Fpr15;
double Fpr16;
double Fpr17;
double Fpr18;
double Fpr19;
double Fpr20;
double Fpr21;
double Fpr22;
double Fpr23;
double Fpr24;
double Fpr25;
double Fpr26;
double Fpr27;
double Fpr28;
double Fpr29;
double Fpr30;
double Fpr31;
double Fpscr;
DWORD Gpr0;
DWORD Gpr1;
DWORD Gpr2;
DWORD Gpr3;
DWORD Gpr4;
DWORD Gpr5;
DWORD Gpr6;
DWORD Gpr7;
DWORD Gpr8;
DWORD Gpr9;
DWORD Gpr10;
DWORD Gpr11;
DWORD Gpr12;
DWORD Gpr13;
DWORD Gpr14;
DWORD Gpr15;
DWORD Gpr16;
DWORD Gpr17;
DWORD Gpr18;
DWORD Gpr19;
DWORD Gpr20;
DWORD Gpr21;
DWORD Gpr22;
DWORD Gpr23;
DWORD Gpr24;
DWORD Gpr25;
DWORD Gpr26;
DWORD Gpr27;
DWORD Gpr28;
DWORD Gpr29;
DWORD Gpr30;
DWORD Gpr31;
DWORD Cr;
DWORD Xer;
DWORD Msr;
DWORD Iar;
DWORD Lr;
DWORD Ctr;
DWORD ContextFlags;
DWORD Fill[3];
DWORD Dr0;
DWORD Dr1;
DWORD Dr2;
DWORD Dr3;
DWORD Dr4;
DWORD Dr5;
DWORD Dr6;
DWORD Dr7;
} CONTEXT; 


Где поле поле регистра Eip?.. Или под каждую архитектуру своё завершение писать?.. Пока ещё такого не было, но всё-таки соглашусь с Abyx: вы бредите. Хотя подход безусловно интересный, но не нестандартный, а нерабочий... smile

Это сообщение отредактировал(а) HellStranger - 2.8.2010, 14:07
PM MAIL   Вверх
Abyx
Дата 2.8.2010, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



HellStranger, у вас по умолчанию платформа xeon? у меня - по умолчанию x86-32
какбэ в WinNT.h нужная структура CONTEXT выбирается дефайнами (#ifdef).

Это сообщение отредактировал(а) Abyx - 2.8.2010, 14:10
PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: нет
Всего: -1



Цитата(Abyx @  2.8.2010,  14:09 Найти цитируемый пост)
HellStranger, у вас по умолчанию платформа xeon? у меня - по умолчанию x86-32какбэ в WinNT.h нужная структура CONTEXT выбирается дефайнами (#ifdef).


Вы, наверное, слепые или просто далеки от мысли... Я привёл пример структуры CONTEXT под архитектурой, где указанного поля регистра EIP просто напросто нет, тем самым указав аппаратную зависимость решения, предложенного 12usver12. Или вы у нас настолько продвинутый программист, что под каждый процессор пишите отдельно, но используете при этом cpp?.. "ОЧЕНЬ УМНЫЙ" ПОДХОД! Удачи в вашем нелёгком (читать по-другому... smile ) труде!

Добавлю только, что вместо того, чтобы ответить на мою просьбу уточнить суть проблемы, вы начинаете искать повод превратить тему в балаган, делаю вывод, что вы баба базарная... И всё-же, посоветую вам для решения проблемы прочесть Рихтера главы 19 и в особенности 20, где, я уверен, ваша проблема описана и решена.

Это сообщение отредактировал(а) HellStranger - 2.8.2010, 14:36
PM MAIL   Вверх
Abyx
Дата 2.8.2010, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



HellStranger, вы такой забавный) пишите еще


естественно использование регистра eip - это платформозависимое решение, это только x86-32. это очевидная вещь же.
проблема поднятая в этой теме полностью раскрыта в этой теме, и уточнять там нечего. в конце концов вы сами можете воспроизвести ситуацию вызвав LoadLibrary("MSHTML.DLL") под отладчиком

PM MAIL   Вверх
HellStranger
Дата 2.8.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 107
Регистрация: 1.9.2009

Репутация: нет
Всего: -1



Цитата(Abyx @  2.8.2010,  14:56 Найти цитируемый пост)
естественно использование регистра eip - это платформозависимое решение, это только x86-32. это очевидная вещь же.


К вашему сведению EIP-регистр общего назначения, присутствующий во всей архитектуре IA-32/64 (в том числе и в XEON), и всё-же решение на его основе даже для данной платформы не подходят. 
Вы тоже забавный, настолько, что отвечать на ваши посты я смысла больше не вижу... Сам шучу- сам смеюсь это про вас... 
PM MAIL   Вверх
Abyx
Дата 2.8.2010, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



HellStranger, я открою вам страшную тайну, первая буква в Eip говорит что это только x32, и никак не x64. там он называется Rip
PM MAIL   Вверх
Dem_max
Дата 2.8.2010, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1780
Регистрация: 12.4.2007

Репутация: 16
Всего: 39



Цитата

Так как образ DLL уже отгружен от адресного пространства вашего процесса. MSHTML.DLL

А кто сказал что по FreeLibrary билиотека будет выгружена из адресного пространства по DLL_PROCESS_DETACH, если вернем false то DLL не будет выгружена?

Может бы все проще ? Автор не вызвал нужные функции для закрытия всех ресурсов ?


--------------------
Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte")
PM MAIL   Вверх
Abyx
Дата 2.8.2010, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



Цитата(Dem_max @  2.8.2010,  20:45 Найти цитируемый пост)
Может бы все проще ? Автор не вызвал нужные функции для закрытия всех ресурсов ? 

автор собственно их и реквестирует
PM MAIL   Вверх
xvr
Дата 11.8.2010, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



А можно узнать, зачем звать LoadLibrary("MSHTML.DLL") когда можно (и нужно) просто создать COM объект (один из поддерживаемых ею)? Возможно она (MSHTML.DLL) не рассчитана на то, что ее будет грузить НЕ COM менеджер?

PM MAIL   Вверх
Abyx
Дата 11.8.2010, 19:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 601
Регистрация: 3.11.2009

Репутация: 2
Всего: 10



xvr, вообще-то создание ком-объекта сопровождается загрузкой библиотеки.
COM менеджер - это что? посмотрите реализацию CoCreateInstance %) там есть LoadLibrary

алсо она рассчитана на то что ее будут грузить не-COM менеджер
PM MAIL   Вверх
xvr
Дата 11.8.2010, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата(Abyx @  11.8.2010,  19:48 Найти цитируемый пост)
xvr, вообще-то создание ком-объекта сопровождается загрузкой библиотеки.
Да, но не ограничивается только им.

Цитата(Abyx @  11.8.2010,  19:48 Найти цитируемый пост)
COM менеджер - это что? посмотрите реализацию CoCreateInstance %) там есть LoadLibrary
COM менеджер следит за тем, что бы библиотеку не выгрузилась, пока есть живые COM объекты (если конечно програмист сам ее не выгрузит в принудительном порядке  smile )

Цитата(Abyx @  11.8.2010,  19:48 Найти цитируемый пост)
алсо она рассчитана на то что ее будут грузить не-COM менеджер 
Да, упоминания в MSDN есть. 

А в примерах от MS ( http://www.microsoft.com/downloads/details...;displaylang=en / Htmldlg.exe) тоже остаются нитки при завершении?


PM MAIL   Вверх
icecrashldr
Дата 12.8.2010, 10:26 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Developer
*


Профиль
Группа: Участник
Сообщений: 122
Регистрация: 5.7.2010

Репутация: нет
Всего: нет



Abyx, Используйте ExitProcess, и не слушайте ШКОЛАТУ!

SetThreadContext(утечка памяти pending kernel services, а на WaitFor**** это вообще полный бред)
TerminateThread - прямая утечка памяти(минимум Не корректное освобождения стека, + pending kernel services).

Использования FreeLibrary есть очень плохо во вногих местах. 
При использовании FreeLibrary, вы должны быть уверены, что кроме вашего кода его не кто не использует, и в библиотеке не был создан поток.


PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0562 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.