도움을 요청합니다.
주프로그램(MDI)에서 Child Dll프로그램을 실행후 Child Dll프로그램은 종료는 정상으로 되는것 같으나, 주프로그램을 종료시 연산자료 오류가 납니다.
참고)
1. 이프로그램은 정적으로 Child Dll 프로그램을 호출하여 실행합니다
2. MDI에서는 client 프로그램을 실행하면 MDIChildCount 에 값이 Child
갯수만큼 증가 해야 하는데 값이 증가되지 않고 항상 0으로 있음
3. 아래 주프로그램에 "//FreeLibrary(DLLHandle);" 를 실행하면
Child Dll를 실행과 동시에 주프로그램이 종료됨
4. debuging 상태로 체크하여 보니 주프로그램을 종료하면 Child 프로그램
까지 와서 종료가 되는것 같구요.
6. 버전는 6입니다.
-- MDI 주프로그램---
// 이부분은 주프로그램에서 Child Dll를 정적으로 부르는 부분
procedure Tsudof.Button1Click(Sender: TObject);
var
DLLHandle:THandle;
showT: procedure(Ap: TApplication; Ss: String);stdcall;
begin
DLLHandle:=LoadLibrary('tempp.dll');
if DLLHandle=0 then
showMessage('tempp.dll을 찾을수 잆습니다.');
try
@showT:= GetProcAddress(DLLHandle,'OpenRoom');
showT(Application,'부프로그램');
finally
//FreeLibrary(DLLHandle);
end;
end;
---- Child Dll ----
library tempp;
uses
SysUtils,
Classes,
Forms,
Windows,
tempu in 'tempu.pas' {tempf};
var
OutApp : TApplication;
{$R *.res}
procedure OutDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
if Assigned(OutApp) then
Application := OutApp;
end;
procedure OpenRoom(MainApp : TApplication; Ss: String); stdcall;
begin
if not Assigned(OutApp) then
begin
OutApp := Application;
Application := MainApp;
end;
tempf := Ttempf.Create(Application.MainForm);
tempf.Caption := Ss;
//tempf.Show;
end;
exports OpenRoom;
begin
OutApp := nil;
DLLProc := @OutDLLProc;
end.
--Child Dll unit 부분----
unit tempu;
'
var
tempf: Ttempf;
implementation
{$R *.dfm}
procedure Ttempf.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := caFree;
end;