|
|
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Вопрос такой: Есть стандартное MDI приложение. В нем есть несколько(три) классов дочерних окон. Для различных нужд. Каждое окно находится в своей DLL. К основному проекту они подключены статически. Всё компилируется отлично и даже собирается .exe файл. НО. При попытке создать в основном приложении дочернее окно вылетает ошибка: Process такой-то raised exception class EInvalidOperation with message: ' Cannot create form. No MDI forms are active'. Что это за хрень и как бы это исправить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2004, 21:01 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
/*В нем есть несколько(три) классов дочерних окон. Для различных нужд. Каждое окно находится в своей DLL. */ Все таки, где находятся классы окон в приложении или в DLL? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 10:42 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 13:04 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Общий ответ. Творю на C++ Bulder'e 6.0 Всё, что связано с дочерними окнами, в том числе и описание их классов, находится в соответствующих DLL. В приложении соответственно создаются объекты этих классов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 13:19 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
не ну ты же как то ее вызываешь ? попробуй все заверни в try { show mdi from dll } exception(Exception &e) { show error' } ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 13:30 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Вот как я это делаю: Фрагмент кода основного приложения. Класс TMyForm описан в соответствующей DLL. Форма является MDIChild'ом. Класс MainForm описан в основном приложении. Форма является MDIForm'ой. TMyForm *N_MyForm; try { N_MyForm = new TMyForm(MainForm); } catch (Exception &e) { Application->ShowException(&e); } ShowException выдаёт 'Cannot create form. No MDI forms are active' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 14:03 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
А самое интересное то, что если в свойствах проектов основного приложения и соответствующих DLL на вкладке 'Packages' поставить галку в 'Build with runtime packages' все начичнает работать. Но тогда на машине без установленного билдера такое приложение не запускается. А хотелось бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 14:13 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Дело в том что это скорее всего связанно с тем что эта дочерняя форма ничего не знает о родителских и наоборот . и что бы они об этом знал нужно компилить модуль длл вместе с динамической библиотекой RTL и пакетом runtime ... вот гдето это читал вот только не помню в какой книжке и кажется она у меня гдето сдесь на работе лежит , в куче других книг с Кингом итд ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 15:23 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Это понятно. А вот что сделать, чтобы во-первых не использовать эти rtl и bpl, а во-вторых чтобы форма понимала кто для неё MDIForm. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:01 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Вот это я не знаю ... А смысл пихать MDIForms в длл темболее статическую ? или так вы используете ранее сделаные формы ? ____ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:37 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
MDIForm'a у меня одна и описана она в основном приложении. А MDIChil'ы в DLL'ях, так как над проектом должны работать несколько человек и у каждого своя форма. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 16:44 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
А зачем обязательно MDIChild ? Можно ведь и обычные формы использовать и создавать их в DLL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.02.2004, 18:24 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Рекомендую из DLL экспортировать функцию которая создает экземпляр класса формы и возвращает указатель на него, а в exe пользоваться этим указателем. Такой механизм у меня работает без глюков. Правда на Delphi. Но я думаю в С++ Builder тоже будет работать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 10:21 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Для тов. Gasanov2003 Так, так, так. А если чуть поподробнее. Я уже попробовал написать что-то подобное. Есть положительные сдвиги, но ошибка все равно вылетает. Похоже что при создании дочернего окна оно почему-то не знает ни одной активной MDI формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 12:11 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 12:46 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
для JibSkeart. В варианте с bpl те же яйца, только в профиль. Все работает до тех пор, пока проект собирается с runtime package. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.02.2004, 16:19 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2004, 11:39 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
А если так написать: В DLL extern "C" void __declspec(dllexport) GetDLLChildForm(TApplication *ExeApp, TForm **Form); TApplication *DLLApp; #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { // Если DLL выгружается if (reason == DLL_THREAD_DETACH) { Application = DLLApp; } return 1; } //--------------------------------------------------------------------------- void GetDLLChildForm(TApplication *ExeApp, TForm **Form) { DLLApp = Application; Application = ExeApp; *Form = new TForm2(Application); } В exe void __fastcall TForm1::ButtonShowDLLFormClick(TObject *Sender) { TForm *DLLForm; GetDLLChildForm(Application,&DLLForm); DLLForm->Show(); } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2004, 09:45 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
Alex7777 почему молчишь ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 09:43 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
to Gasanov2003 Это не я молчу. Это у нашего провайдера вчера на пол дня упал DNS server. А что касается главного вопроса, то с небольшими исправлениями и дополнениями твоего кода все заработало. Так что с меня магарыч :-)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 15:01 |
|
||
|
проблема работы с DLL в MDI приложении
|
|||
|---|---|---|---|
|
#18+
to Gasanov2003 Кстати вот что получилось у меня: в DLL(*.cpp): #include <vcl.h> #include <windows.h> #define BUILD_DLL #include "ChildWinDLL.h" #pragma hdrstop #pragma argsused TApplication *ThisApp = NULL; int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved) { if (reason == DLL_PROCESS_DETACH) { if (ThisApp) Application = ThisApp; } return 1; } TMDIChild *ShowMDIChild(TApplication *CallingApp, TMDIChild *N_MDIChild) { if (!ThisApp) { ThisApp = Application; Application = CallingApp; } N_MDIChild = new TMDIChild(Application); N_MDIChild->Show(); return N_MDIChild; } в DLL(*.h): #include "DLLChildWinUnit.h" #if defined(BUILD_DLL) # define DLL_EXP __declspec(dllexport) #else # if defined(BUILD_APP) # define DLL_EXP __declspec(dllimport) # else # define DLL_EXP # endif #endif extern "C" DLL_EXP TMDIChild *ShowMDIChild(TApplication *CallingApp, TMDIChild *N_MDIChild); в основном приложении(*.cpp): #define BUILD_APP #pragma hdrstop #include "E:\Projects\MDI\dll\ChildWinUnit\ChildWinDLL.h" TMDIChild* N_MyForm; N_MyForm = ShowMDIChild(Application,N_MyForm); вот. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2004, 15:09 |
|
||
|
|

start [/forum/search_topic.php?author=Batya&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
get settings: |
5ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
29ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 612ms |
| total: | 741ms |

| 0 / 0 |
