Dll을 정의 해놓은 부분 입니다.
--------------------------------------------------------------------------------
Procedure LibraryCall_PR023(const DBhandle : HDBIDB;Mainapp : TApplication;const Dllname,ProcName: string;var L_pcd,L_pname : string);
type
TProc = Procedure(const DBhandle : HDBIDB;Mainapp : TApplication;const Dllname,ProcName : string;var L_pcd,L_pname : string);Stdcall;
VAR
H : THANDLE;
PROC : TProc;
begin
H := Loadlibrary(Pchar(DllName));
if H < 32 then begin
ShowMessage('해당 DLL이 존재하지 않습니다!');
Exit;
end;
@PROC := GetprocAddress(H,Pchar(ProcName));
if not (@proc = nil) then Begin
proc(DBhandle,Mainapp,Pchar(DllName),Pchar(ProcName),L_pcd,L_pname);
End;
Freelibrary(H);
End;
--------------------------------------------------------------------------------
Dll을 Call한 부분 입니다.
procedure TPRO023_TP.BtnViewClick(Sender: TObject);
Var
L_pcd, L_pname : String;
begin
LibraryCall_PR023(PR023M_DB.Handle,Application,'D:업무실적PR023PR023_SDP1.Dll','Call_PR023S',L_pcd,L_pname);
If L_pcd = '' Then
ShowMessage('e')
else
ShowMessage('s');
end;
Call 하는데 까지는 괜찮은데
근데 문제는 Call한 다음에 위에 보이는 L_pcd를 받아와야 하는데
이전에 FreeLibrary에서 에러가 납니다
누가그러든데 FreeLibrary하면 Dll에서 폼등이 있다면 자신의 Application 객체를 해제할려고 한다고 합니다.
그래서 그렇다는데
이거 해결할려면 FreeLibrary하기 전에 Application 객체를 돌려주는 부분을 작성해야 한다는데 그게 무신 말인지...
아시는 고수님 분 꼭 좀 부탁드립니다.
정말 급합니다.