Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

DLL with MDI... [D6, WinXP]


Страницы:   1 2

Ragazor ©   (2006-09-15 11:16:00) 

Есть DLL с MDI формой.

Читал что для работы с мди
нужно передавать Апликейшн

этот метод не работает: (1)
type
 TdllProc = procedure(ParApplication: TApplication);
var
 DLLInstance : THandle;
 DLLProcedure : TdllProc;
begin
 DLLInstance := LoadLibrary('cmsnote.dll');
 if DLLInstance = 0 then begin
   MessageDlg('Невозможно загрузить DLL', mtError, [mbOK], 0);
   Exit;
 end;
 @DLLProcedure := GetProcAddress(DLLInstance, 'DicWork');
 if @DLLProcedure <> nil then
   DLLProcedure(Application)
 else
   MessageDlg('Не найдена процедура: DicWork', mtError, [mbOK], 0);

а с использованием в библиотеке этого, работает: (2)
procedure DLLUnloadProc(Reason: Integer); register;
begin
 if Reason = DLL_PROCESS_DETACH then begin
   Application := _DLLApplication;
 end;
end;

begin
 _DLLApplication := Application;
 if @DllProc = nil then DLLProc := @DLLUnloadProc;
end.

В dll проц начинается так

procedure DWork(ParApplication: TApplication); export; stdcall;
begin
 CoInitialize(nil);
 Application := ParApplication;
 _ParentApplication := ParApplication;
 dmMain := TdmMain.Create(Application);
 WorkForm := TFormDictionaries.Create(Application);

(WorkForm = MDIchildForm)
в 1 случае WorkForm := TFormDictionaries.Create(Application)
вызывает no active MDI child form....

во втором все работает, но там проблемы с выгрузкой DLL.

со статичесткой загрузкой такие же проблемы как и в первом варианте вызова

Подскажите как нужно разрулить эту проблему?


Ragazor   (2006-09-15 13:15:00) [21]

"procedure DWork(ParApplication: TApplication); export; stdcall;
begin
CoInitialize(nil);
Application := ParApplication;
_ParentApplication := ParApplication;
dmMain := TdmMain.Create(Application);
WorkForm := TFormDictionaries.Create(Application);

(WorkForm = MDIchildForm)
в 1 случае WorkForm := TFormDictionaries.Create(Application)
вызывает no active MDI child form....
"


Сергей М.   (2006-09-15 12:54:00) [22]

А где и когда у тебя создается MDIParent-форма ?


Ragazor   (2006-09-15 12:36:00) [23]

это дата модуль


Сергей М.   (2006-09-15 12:05:00) [24]


> TdmMain


Это MDIParent-форма ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо