Tengo un formulario contenedor (MDI) en el cuál cargo una librería externa de la siguiente manera:
Código Delphi
[-]
TCrear = procedure (ParentApplication: TApplication; ParentForm: TForm); stdcall;
......
Procedure TMain.Cargar.....
var
DllHandle: THandle;
ProcAddr: FarProc;
CrearForma: TCrear;
....
DllHandle := LoadLibrary(PAnsiChar('UnArchivo.Dll'));
ProcAddr := GetProcAddress(DllHandle, 'CrearForma');
if ProcAddr <> nil then begin
CrearForma := ProcAddr;
CrearForma(Application,Self);
end;
....
En el archivo .dll tengo lo siguiente:
Código Delphi
[-]
procedure CrearForma(ParentApplication: TApplication; ParentForm: TForm); export; stdcall;
begin
Application:=ParentApplication;
with TForm1.Create(Application) as TCustomForm do begin
MyParentForm:=ParentForm;
MyParentApplication:=Application;
FormStyle := fsMDIChild;
Show;
end;
end;
exports
CrearForma;
Con esto puedo cargar el DLL sin ningún problema y me lo muestra como hijo (MDIChild) de mi formulario principal (MDI).
Pero en mi formulario principal (MDI), la variable MDIChildCount siempre me da 0. Aún y cuando yo veo que está el formulario de la DLL creado como hijo (Mdichild).
¿cómo puedo hacer que mi DLL se considere en el formulario principal?
Es decir, ¿como puedo hacer que MDIChilCount realmente me cuente mi
DLL?
Lo que al final quiero lograr, es evitar que se cierre el formulario principal (MDI) si existen DLL cargadas:
Código Delphi
[-]
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if MDIChildCount <> 0 then begin
showmessage('No cierras');
CanClose := False;
end;
end;
Y aprovechando, ¿como puedo hacer para cargar una DLL solo una vez?
P.D. Se me olvidó cuál era la correcta definición de una DLL: ¿librería o biblioteca?