|
|
|
MDI и пакеты
|
|||
|---|---|---|---|
|
#18+
Хочу, чтобы все приложение состояло из файла ехе и файлов bpl. При этом хочу, чтобы основная прога содержала родительскую форму MDI, а bpl-ки - дочерние. Все хорошо получается, но только при использовании флажка Use dynamic RTL. А мне надо, чтобы все библиотеки включались в основной файл. Вроде получилось, только при закрытии основной программы вылетает ошибка (при трассировке не происходит выгрузки программы из памяти). Что делать? Как правильно сделать? Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.02.2004, 17:21 |
|
||
|
MDI и пакеты
|
|||
|---|---|---|---|
|
#18+
Вообще-то удаляю, но поскольку главная родительская форма не в курсе про своих детей (MDIChildCount = 0, даже если дети есть), то она ничего не удаляет. Потом я выгружаю пакидж и вот тут-то и происходит странное. Код в основной форме такой: typedef void __declspec(dllimport)ShowAccType(int,TApplication *); ShowAccType * ShowAcc; // char* path = "Pcks\\AccountsPack.bpl" if (!Package) Package = LoadPackage(path); if (Package) { ShowAcc = (ShowAccType * )GetProcAddress((HINSTANCE)Package, "_ShowAccount"); if (ShowAcc) ShowAcc(firm_id, Application); else { ShowMsgBox(msg_Error, MB_OK, ecode22[Lang]); UnloadPackage(Package); } На закрытие формы основной так: // while(this->MDIChildCount) this->MDIChildren[0]->Free(); if (Package) UnloadPackage(Package); В самом пакете: void ShowAccount(int firm_id, TApplication * a) { if (!App) { App = Application; Application = a; } frm_Accounts = new Tfrm_Accounts(Application);//Application); frm_Accounts->Show(); } #pragma argsused int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void*) { if ( (reason == DLL_PROCESS_DETACH) && (App) ) Application = App; return 1; } И вот тут, когда процесс детачится, программа начинает вести себя странно. Если в IDE, там просто исчезает значок и нет выгрузки из памяти, а если просто запускать программу, то выдается ошибка Access violation. При этом, если установить флажки Use RTL, все работает нормально. Но я-то хочу без них! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.02.2004, 15:05 |
|
||
|
MDI и пакеты
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. Зачем нужно присваивание Application?? Мне кажется это ненормально. Пускай owner формы будет своя application а parent - основное окно. А то получается уже после DLL_PROCESS_DETACH ссылка на объект остается.. - и он будет уничтожен только при завершении основной проги. отсюда совершенно естественно может возникнуть и shared violation. попробуй например так: if ( (reason == DLL_PROCESS_DETACH )&& frm_Accounts) delete frm_Accounts ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.02.2004, 11:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=32401574&tid=2035435]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
2ms |
| others: | 231ms |
| total: | 417ms |

| 0 / 0 |
