powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Диалоговые окна в DLL
12 сообщений из 12, страница 1 из 1
Диалоговые окна в DLL
    #32682465
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прблема такая: имеются несколько классов (отец - CDialog), которые используются в нескольких приложениях (задачах). При изменении функциональности данных классов необходимо, чтобы эти изменения произошли и в этих приложениях (желательно без их дополнительной пересборки). Решение, казалось, бы такое - использование DLL, но насколько мне известно, с диалоговыми окнами в DLL существуют определенные трудности. Может кто знает как сделать DLL , использующую классы диалоговых окон (в которой эти окна можно запустить).
Заранее спасибо.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32682471
Sergey D.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
используй связку ATL + MFC.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32682487
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если можно, то поподробнее, пожалуйста...
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32682650
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос: а как ты вообще хотел использовать диалоги из длл?

Я делал так (у меня была несколько иная задача, но похожая по смыслу. У меня было много dll-ей, но у всех были диалоги и внезависимости от того, скоко dll-ин добавилось в эту систему, они должны поддерживать уже существующий интерфейс и проги, которые их используют, должны работать по старому без пересборки, так же как и при пересборке старых dll-ин):
- разработал некий стандартный API для общения с диалогами.
- реализовал все API-функции в dll.
всё.
Теперь, можно менять код внутри dll, главное, чтобы API оставался прежним.

К примеру, заводишь експортную функцию LPVOID OpenSomeDialog(sometype someparam)
Внутри неё, к примеру запускаешь модально диалог, чё-то в нём делаешь и через LPVOID возвращешь результат.

Теперь, как бы ты не переписывал сам диалог, возвращай значение того типа, который возвращал раньше (LPVOID написан на случай, если тип возвращаемого значения зависит от типа аргумента, как например в SelectObject(...))
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32683050
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть экспортная функция:
__declspec(dllexport) int _stdcall Func(LPUNKNOWN lp)
{
CDlg dlg(lp);
dlg.DoModal();
return S_OK;
}
Вызов самой функции из приложения (с параметром), выполняется без проблем. Но вот когда доходит до объявления диалога- указатель на CWnd=0x0000000..., dlg.DoModal() возвращает -1 (ну и окно, соответственно, не появляется).
По-видимому так делать нельзя ;( Где-то слышал что все диалоги в DLL надо создавать ручками, а делать это - долго,лениво да и много. Может есть более лучший путь?
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32683503
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_VCРешение, казалось, бы такое - использование DLL, но насколько мне известно, с диалоговыми окнами в DLL существуют определенные трудности.

Не существует никаких трудностей с диалоговыми окнами в DLL.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32684340
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Не существует никаких трудностей с диалоговыми окнами в DLL.

Действительно, если разобраться как это все сделать - никаких трудностей не будет (вопрос был не про существование трудностей, а как сделать DLL c диалоговыми окнами). Так я и прошу помощи людей, которые с этим разобрались и могут меня, как говорится , направить на правильный путь...
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32684433
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Небольшое уточнение: в диалоговом окне используются элементы ActiveX.
При отсутствии данных элементов диалог запускается.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32684578
Siebentearbeit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПри отсутствии данных элементов диалог запускается.
Отсюда мораль: проблема не в DLL, а в ActiveX-ах.
Если ты тоже самое проделаешь в обычной программе, а не в dll-ке, тоже не откроется.

Диалог подымится только если подымутся все его дети.
Чтобы поюзать АктивыХ, надо (под MFС (подWin32API не юзал, не знаю))создать враперы для самого Активыха и всех, кто с ним связан. Это MFC делает само. Достаточно просто создать переменную в классе диалога для данного активыха. MFCа скажет, что не знает, чё с ним делать и захочет создать соответствующие классы, ты с ней согласишься и будет тебе сщастье и в dll и в exe.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32684662
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex_VC
Действительно, если разобраться как это все сделать - никаких трудностей не будет (вопрос был не про существование трудностей, а как сделать DLL c диалоговыми окнами).


1) Взять
2) и сделать.
Ровно точно так же, как и в .exe

Alex_VC
Так я и прошу помощи людей, которые с этим разобрались и могут меня, как говорится , направить на правильный путь...


Разбираться не с чем.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32684766
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siebentearbeit Отсюда мораль: проблема не в DLL, а в ActiveX-ах.
Если ты тоже самое проделаешь в обычной программе, а не в dll-ке, тоже не откроется.

Диалог подымится только если подымутся все его дети.
Чтобы поюзать АктивыХ, надо (под MFС (подWin32API не юзал, не знаю))создать враперы для самого Активыха и всех, кто с ним связан. Это MFC делает само. Достаточно просто создать переменную в классе диалога для данного активыха. MFCа скажет, что не знает, чё с ним делать и захочет создать соответствующие классы, ты с ней согласишься и будет тебе сщастье и в dll и в exe.

В том то вся и фигня, что элемент ActiveX связан с переменной (все классы элемента ActivX вставлены в проект DLL),сама DLL компилится. При установке свойства диалога "No fail create", приложение сваливается , без установки этого свойства - окно просто не открывается.
Просмотрел, что находится в созданной DLL : диалоги все, вот только в тех, где есть ActivX - серые "дыры" (элемент не отображается), в свойствах которых одна вкладка на которой в параметре Class указан ключ в реестре на этот ActivX и еще пара-тройка параметров.
...
Рейтинг: 0 / 0
Диалоговые окна в DLL
    #32686442
Alex_VC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все, разобрался : надо было включить поддержку контейнера элементов управления и автоматизацию. Вопрос закрыт. Всем спасибо!
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Диалоговые окна в DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]