![]() |
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]() ![]() ![]() |
|
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
Суть моего вопроса (подробно):
Допустим у меня реализован так сказать приложение-провайдер. В том смысле, что оно должно осуществлять роль посредника между сервером и плагинами, которые подключаются к этому самому приложению. Плагины будут представлять собой сетевые игрушки и другие фенечки. Сами по себе они будут лишь передавать и получать данные от моего "провайдера". С этим проблем нет. Ну вобщем это все не важно. Важно то что я не могу реализовать обыкновенную WinMain ну и Proc'едуру главную. Вобшем ДЛЛка моя не хочет быть ни чем, кроме библиотеки. Так как все-таки окошки, процедуры и другие подобные вещи сделать в ДЛЛ? вобщем я в растерянности... помогите. --------------------
Experimentia est optima rerum magistra |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
MoZy |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
586, во-первых, я пишу в Dev-C++. Там варианты проектов Win32 DLL, Win32 GUI, ... . Если ставить ГУИ и откомпилить, то все окошки создаются и все нормально. НО создается ЕХЕшник. Но это не самое страшное, а страшно то, что при вызове етого ехешника как библиотеки, он и работает как библиотека и окна не создаются (то есть только функции и работают). А если компилить просто как ДЛЛ - окошек ни там ни тут не видно. Может есть какие-то особые штуки, которые надо сделать, чтобы все было хорошо?
например, если
даю кусок кода. хедер с экспортными функциями приводить не буду - нет необходимости.
--------------------
Experimentia est optima rerum magistra |
||||
|
|||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Не понял. У тебя exe-шник в роли exe-шника и библиотеки сразу?
Или WinMain экспортируется. Или тут слеплен код exe и dll????? |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
586,
![]() ой. неужели надо просто WinMain экспортировать и запустить из "мамы"? А процедуры не надо? Это сообщение отредактировал(а) MoZy - 15.7.2006, 20:41 --------------------
Experimentia est optima rerum magistra |
|||
|
||||
Pilligrim |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 9.6.2006 Репутация: нет Всего: 1 |
![]() Глянул я твой кусок кода, и не пойму как у тебя используется DllMain. К-а-к? |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
У тебя exe-шник который ты загружаешь, как dll, функцией LoadLibrary.
WinMain у тебя исполняться не будет, а DllMain воспринимается, как обычная функция, и не исполняется. Вообще, у DLL ф-ция DllMain - это точка входа. У твоего exe точка входа - WinMain. А у исполняемого файла две точки входа быть не может! Поэтому exe просто загружается. Это сообщение отредактировал(а) 586 - 15.7.2006, 20:50 |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
586, ну я компилю как DLL проект и получается DLL. Функции экспортируются нормально... Так что мне сделать? Экспортировать WinMain и отказаться от DLLMain?
--------------------
Experimentia est optima rerum magistra |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Если у тебя exe - откажись от DllMain.
Если у тебя dll - откажись от WinMain.
Хочешь запускать модуль отдельно - exe. |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
586, Я хочу, чтобы была связь между модулем и хостом. От WinMain'а отказаться не могу. Нельзя ли сделат ехе, но с расширением ДЛЛ? Кстати, с импортом функций проблем не будет?
Добавлено @ 21:10 УРААА!!! Я отказался от DLLMain (я его раньше вообще не использовал, просто подумал, что может понадобиться при инициализации) и просто экспортировал WinMain и вызвал в хосте. И теперь у меня в ДЛЛке окошко есть! ![]() --------------------
Experimentia est optima rerum magistra |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Можно, но какой смысл в WinMain. Не должно. С экспортом WinMain могут быть проблемы. Я поэксперементировал, и вот что получил:
А функцию main вызываешь, как WinMain - c теми же параметрами. Она всего лишь передаёт управление WinMain. Это сообщение отредактировал(а) 586 - 15.7.2006, 21:56 |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
||||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
Попробовал вот что:
Работает хорошо, но exe-шник сам запускаться не хочет. Делай DLL!!! |
|||
|
||||
MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
Спасибо, 586. Я все именно так и сделал. Но у меня возникли проблемы (в том числе и с пониманием сути вещей):
1. Если где-либо (хоть в WinProc, хоть в WinMain хоста) прописать что-либо (Beep или MessageBox) после вызова функции ModuleWinMain (или main как в твоем примере, 586), то это самое после сработает после того, как отдестроится окошко модуля. В чем прикол? 2. Если в хосте прописать FreeLibrary(Module_hInst), без предварительной команды модулю закрыть себя, то вылазит ошибка. Вопрос: это нормально? 3. Если же отдестроить окно хоста (то есть PostQuitMessage(0)) не делая выше сказанное, то: а) модуль продолжит свою работу; б) каким-то чудом хост будет попрежнему принимать сообщения от модуля и реагировать на них* *В модуле я по таймеру шлю сообщение хосту, а тот на это сообщение реагирует звуковым сигналом. Растолкуйте, пожалуйста, всю эту муть. --------------------
Experimentia est optima rerum magistra |
|||
|
||||
586 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2243 Регистрация: 8.5.2006 Репутация: 39 Всего: 146 |
В том, что код застревает в цикле обработки сообщений GetMessage. Так и должно быть.
Тестил в диалоге. Когда главное окно закрываю, окно exe продолжает работать. Если в диалоге прописать PostQuitMessage(0) и закрыть, окно exe тоже закроется. Но это в диалоге. В окне не знаю. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Системное программирование и WinAPI" | |
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |