안녕하세요.
이번 프로젝트에서 동적으로 DLL을 로드해서 MDI child form을 띄우고 있습니다.
LoadLibrary를 사용해서 폼은 잘 뜨는데,
폼을 닫고 그 폼의 DLL을 컴파일 하면 사용중이라고 하면서 컴파일이 되지 않네요.
FreeLibrary를 하면 될꺼 같긴한데..
FreeLibrary를 메인폼에서 해야 할까요? 차일드 폼에서 해야할까요?
테스트 해본것은 다음과 같습니다.
1. LoadLibrary
Try
FreeLibrary
Finally
End; => 바로 에러.
2. 차일드 폼 Destroy 시 메인폼에 메시지를 보내서 FreeLibrary => 폼닫을 때 에러.
3. 차일드 폼 Destroy 시 메인폼에 LoadLibrary 한 Handle값을 넘기고 메인폼의 Timer에서 FreeLibrary
=> 에러안나고 컴파일도 됨. Timer를 사용해서 (막연한)찜찜함..
몇 일째 잡고 있는데 답이 잘 안나오네요.
혹시 같은 경험을 하신 분이나 아시는 분은 답글 부탁드릴께요. (__)
아래 코드는 로드된 DLL 이 해제가 안되어 있는경우 해제를 하는 코드입니다.
참고하시고 즐거운 프로그래밍 하세요..
var
hDLL : HWND;
begin
hDLL := GetModuleHandle('DLL이름');
while True do
begin
if hDLL <> 0 then
FreeLibrary(hDLL)
else
Break;
end;
...
LoadLibrary(...
end;