Q&A

  • DLL 관련
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 객체를 돌려주는 부분을 작성해야 한다는데 그게 무신 말인지...

아시는 고수님 분 꼭 좀 부탁드립니다.

정말 급합니다.



0  COMMENTS