|
|
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Прблема такая: имеются несколько классов (отец - CDialog), которые используются в нескольких приложениях (задачах). При изменении функциональности данных классов необходимо, чтобы эти изменения произошли и в этих приложениях (желательно без их дополнительной пересборки). Решение, казалось, бы такое - использование DLL, но насколько мне известно, с диалоговыми окнами в DLL существуют определенные трудности. Может кто знает как сделать DLL , использующую классы диалоговых окон (в которой эти окна можно запустить). Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 09:17 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
используй связку ATL + MFC. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 09:22 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
А если можно, то поподробнее, пожалуйста... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 09:30 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Вопрос: а как ты вообще хотел использовать диалоги из длл? Я делал так (у меня была несколько иная задача, но похожая по смыслу. У меня было много dll-ей, но у всех были диалоги и внезависимости от того, скоко dll-ин добавилось в эту систему, они должны поддерживать уже существующий интерфейс и проги, которые их используют, должны работать по старому без пересборки, так же как и при пересборке старых dll-ин): - разработал некий стандартный API для общения с диалогами. - реализовал все API-функции в dll. всё. Теперь, можно менять код внутри dll, главное, чтобы API оставался прежним. К примеру, заводишь експортную функцию LPVOID OpenSomeDialog(sometype someparam) Внутри неё, к примеру запускаешь модально диалог, чё-то в нём делаешь и через LPVOID возвращешь результат. Теперь, как бы ты не переписывал сам диалог, возвращай значение того типа, который возвращал раньше (LPVOID написан на случай, если тип возвращаемого значения зависит от типа аргумента, как например в SelectObject(...)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 10:44 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Есть экспортная функция: __declspec(dllexport) int _stdcall Func(LPUNKNOWN lp) { CDlg dlg(lp); dlg.DoModal(); return S_OK; } Вызов самой функции из приложения (с параметром), выполняется без проблем. Но вот когда доходит до объявления диалога- указатель на CWnd=0x0000000..., dlg.DoModal() возвращает -1 (ну и окно, соответственно, не появляется). По-видимому так делать нельзя ;( Где-то слышал что все диалоги в DLL надо создавать ручками, а делать это - долго,лениво да и много. Может есть более лучший путь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 12:44 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Alex_VCРешение, казалось, бы такое - использование DLL, но насколько мне известно, с диалоговыми окнами в DLL существуют определенные трудности. Не существует никаких трудностей с диалоговыми окнами в DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2004, 15:04 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
MasterZiv Не существует никаких трудностей с диалоговыми окнами в DLL. Действительно, если разобраться как это все сделать - никаких трудностей не будет (вопрос был не про существование трудностей, а как сделать DLL c диалоговыми окнами). Так я и прошу помощи людей, которые с этим разобрались и могут меня, как говорится , направить на правильный путь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 06:01 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Небольшое уточнение: в диалоговом окне используются элементы ActiveX. При отсутствии данных элементов диалог запускается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 08:53 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
авторПри отсутствии данных элементов диалог запускается. Отсюда мораль: проблема не в DLL, а в ActiveX-ах. Если ты тоже самое проделаешь в обычной программе, а не в dll-ке, тоже не откроется. Диалог подымится только если подымутся все его дети. Чтобы поюзать АктивыХ, надо (под MFС (подWin32API не юзал, не знаю))создать враперы для самого Активыха и всех, кто с ним связан. Это MFC делает само. Достаточно просто создать переменную в классе диалога для данного активыха. MFCа скажет, что не знает, чё с ним делать и захочет создать соответствующие классы, ты с ней согласишься и будет тебе сщастье и в dll и в exe. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 10:09 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Alex_VC Действительно, если разобраться как это все сделать - никаких трудностей не будет (вопрос был не про существование трудностей, а как сделать DLL c диалоговыми окнами). 1) Взять 2) и сделать. Ровно точно так же, как и в .exe Alex_VC Так я и прошу помощи людей, которые с этим разобрались и могут меня, как говорится , направить на правильный путь... Разбираться не с чем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 10:32 |
|
||
|
Диалоговые окна в DLL
|
|||
|---|---|---|---|
|
#18+
Siebentearbeit Отсюда мораль: проблема не в DLL, а в ActiveX-ах. Если ты тоже самое проделаешь в обычной программе, а не в dll-ке, тоже не откроется. Диалог подымится только если подымутся все его дети. Чтобы поюзать АктивыХ, надо (под MFС (подWin32API не юзал, не знаю))создать враперы для самого Активыха и всех, кто с ним связан. Это MFC делает само. Достаточно просто создать переменную в классе диалога для данного активыха. MFCа скажет, что не знает, чё с ним делать и захочет создать соответствующие классы, ты с ней согласишься и будет тебе сщастье и в dll и в exe. В том то вся и фигня, что элемент ActiveX связан с переменной (все классы элемента ActivX вставлены в проект DLL),сама DLL компилится. При установке свойства диалога "No fail create", приложение сваливается , без установки этого свойства - окно просто не открывается. Просмотрел, что находится в созданной DLL : диалоги все, вот только в тех, где есть ActivX - серые "дыры" (элемент не отображается), в свойствах которых одна вкладка на которой в параметре Class указан ключ в реестре на этот ActivX и еще пара-тройка параметров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2004, 10:59 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32683503&tid=2034446]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
50ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 196ms |
| total: | 330ms |

| 0 / 0 |
