DLL을 사용할 때 정적인 방법으로 사용하는 것은 Application이 자신이 사용할 DLL파일을 프로그램 실행 시에 메모리에 로드한 후 Application을 종료할 때 메모리에서 해제하는 방법을 말하며, 동적인 방법은 Application이 DLL을 필요할 때마다 로드하고 사용한 후에는 바로 메모리에서 해제시키는 방법이라고 책에서 그러더군요.
하얀까마귀님이 설명하신 거는 정적인 방법이구요...
제가 사용하건 동적인 방법인데... 대략 이렇습니다. (책 예제)
procedure TForm1.Button1Click(Sender:TObject);
type
TFunc = function(str : string) : boolean; stdcall;
var
H : THandle;
MyFunc : TFunc;
S : string;
begin
//LoadLibrary함수 이용 Application에서 사용하고자 하는 DLL을 메모리에 로드.
H := LoadLibrary('secondDLL.DLL');
//DLL에 정의되어 있는 함수의 메모리 번지를 알아오고 그 값을 포인터로 받는다.
@MyFunc := GetProcAddress(H, 'JuminValid');
//함수호출
if (not MyFunc((Edit1.text)) then
Showmessage('주민번호가 잘못되었습니다.')
else
Showmessage('주민번호가 맞습니다.');
//FreeLibrary함수를 사용하여 메모리에서 DLL을 해제한다.
FreeLibrary(H);
end;
그런데 위에 프로시저가 호출될때마다 DLL을 로드했다가 해제하는것보다 Application이
실행시에 Application변수와 이벤트를 이용해서 DLL을 로드하고 해제하고 싶거든요..
그렇게되면 정적인 방법과 다를게 없지만.. 테스트 결과 무슨이유인지는 모르겠는데
Kernel32.dll에서 오류가 발생하거든요...
그래서 그걸 동적인 방법으로 사용하고 싶거든요..
전부 답변이 어려우시면 Application변수정의와 Application이벤트사용법에 대해서라도
꼭 좀 설명부탁드립니다.
* 하얀까마귀님 사진으로 뵙고 이렇게 또 뵙게 되는군요.
저도 델파이세상 회원이거든요.
지금까지 김차영이었습니다.
앞으로 자주 질문드릴께요..