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

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

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

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

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

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

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


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

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


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

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

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


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