![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
Subj -- можно как-нибудь это сделать (если входной точкой программы является не WinMain)?
Есть какой-нибудь API для этого или нет? --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
а для чего но тебе нужно?
P.S. API для нету потому как это работа загрузчика -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
Знать hInstance требуется для множества функций -- RegisterClass, например.
А проблема в том, что я разрабатываю программу на MinGW. Стандартная точка входа -- не WinMain, а обычная main (argc, argv). То есть, видимо, где-то в стандартных библиотеках все-равно вызывается WinMain -- но вот как оттуда извлечь параметр hInstance, не представляю... --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
_hunter |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 8564 Регистрация: 24.6.2003 Где: Europe::Ukraine:: Kiev Репутация: 13 Всего: 98 |
так ты консольное приложение собираеш (потому и простой main)
там, по-идее, какой-то ключ должен быть... -------------------- Tempora mutantur, et nos mutamur in illis... |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
GetModuleHandle(0);
|
|||
|
||||
Wolf |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 90 Регистрация: 9.6.2006 Где: Нижневартовск Репутация: нет Всего: нет |
586 прав, всё простенько очень определяется hInst=GetModuleHandle(NULL);
|
|||
|
||||
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
586 и Wolf, огромное спасибо! Это именно то, что было надо.
По поводу приложения: да, оно у меня консольное -- но вместе с тем, иногда возникает необходимость работать с окнами. Желательно как-то совместить консольный и оконный интерфейсы. В связи с этим плавно переходим к следующему вопросу -- как это лучше сделать. ![]() Поясню вопрос. Пока что все работает примерно так: нормальный режим -- консольный, но в определенные моменты входим в "оконный режим": открываем одно (2, 3, N...) окошек и запускаем традиционный цикл обработки сообщений (while (GetMessage (...) { TranslateMessage (...); DispatchMessage (...); })) Когда закрывается последнее окно, покидаем цикл и возвращаемся в консольный режим. Все работает, но хотелось бы сделать как-нибудь поизящнее, что ли... Если будут какие-нибудь идеи, буду благодарен. --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
Exekutor |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 440 Регистрация: 1.11.2005 Где: Казахстан. Костан ай Репутация: нет Всего: 4 |
Просто создавай окна из консоли с помощью CreateWindowExA
-------------------- [color=blue][size=2]En taro addun, ma sol larinas[/size][/color] |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Если окно диалоговое - юзай DialogBoxParam или CreateDialogParam. Это сообщение отредактировал(а) 586 - 13.7.2006, 12:48 |
|||
|
||||
regis |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
586, спасибо. Идея насчет использования IsWindow неплохая...
--------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
только не используй GetModuleHandle(NULL) в DLL, она вернет дескриптор программного модуля, а не самой библиотеки.
-------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
SeregaLBN |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 178 Регистрация: 3.10.2003 Где: Киев Репутация: нет Всего: нет |
В длл пользуйтесь HINSTANCE GetCurrentInstance()
самому ещё не довелось проверить... |
|||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
я пробовал VirtualQuery в DLL, mem.AllocationBase вернет все тот же программный модуль, а не DLL. Ассемблер можно даже не использовать, просто указать адрес любого локального метода.
Чтобы получить реальный дескриптор нужно пройтись по всем модулям текущего процесса(используя EnumProcessModules из апешки Psapi), затем получить их стартовые точки(EntryPoint) и сравнить их с DllMain для текущей библиотеки. чтобы получить EntryPoint нужно вызвать GetModuleInformation. Мороки много а толку мало, поэтому проще обработать hinstDLL в DllMain и сохранить глобально, это не так уж и накладно. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
Damarus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 671 Регистрация: 6.5.2006 Репутация: 4 Всего: 29 |
||||
|
||||
GremlinProg |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
Тогда для каждой длл нужно отдельно писать такую вещь, или заводить макрос с именем длл, т.е. для методов, использующих hInstance в длл придется писать отдельный от exe код. Муторно. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |