다음과 같은 Dll을 불러오는 코드가 있습니다..
물론 만든 DLL 폼이 뜹니다..
그런데 이것이 모달로 밖에 되질 않아요...
dll 코드에 모달로 뜨도록 했으닌까요..
모달로 하지 않으면 저 밑에 FreeLibrary(hLib); 이 바로 호출되어
폼이 떴다가 사라집니다...
그렇다고 FreeLibrary(hLib); 을 안쓸수 없고....
그러자니 Dll 폼을 모달로 밖에 띄울수 없으니 이걸 어떻하죠?
그냥 일반 폼 띄우듯이 할 수 없나요?
저의 이 고민을 이해하실수 있나요?
procedure TfrmMain.Button1Click(Sender: TObject);
type
TCD2MP3Open = function : Boolean; stdcall;
var
hLib : THandle;
CD2MP3Open : TCD2MP3Open;
begin
hLib := LoadLibrary(PChar(GetCurrentDir + 'CD2MP3Cd2mp3.dll'));
if (hLib < 32) then begin
MessageBox(Self.Handle, 'can''t Load Library', 'OK', mb_IconInformation);
Exit;
end;
CD2MP3Open := GetProcAddress(hLib, 'CD2MP3Open');
CD2MP3Open;
FreeLibrary(hLib);
end;
제가 주로 쓰는 방법은 커스텀 핸들을 사용하는 방법입니다.
즉 커스텀 핸들을 DLL호출하는 메인에서 정의하고
커스텀 핸들을 DLL에 변수로 넘기고
DLL의 폼종료시 또는 원하는 시점에 Sendmessage또는 PostMessage로
커스텀 핸들로 넘기면
그핸들을 받은 메인폼이 FreeLibrary(hLib)을 실행하면 되겠죠.
그 외에도 많아요..
김춘성 wrote:
> 다음과 같은 Dll을 불러오는 코드가 있습니다..
> 물론 만든 DLL 폼이 뜹니다..
>
> 그런데 이것이 모달로 밖에 되질 않아요...
> dll 코드에 모달로 뜨도록 했으닌까요..
> 모달로 하지 않으면 저 밑에 FreeLibrary(hLib); 이 바로 호출되어
> 폼이 떴다가 사라집니다...
>
> 그렇다고 FreeLibrary(hLib); 을 안쓸수 없고....
> 그러자니 Dll 폼을 모달로 밖에 띄울수 없으니 이걸 어떻하죠?
> 그냥 일반 폼 띄우듯이 할 수 없나요?
>
> 저의 이 고민을 이해하실수 있나요?
>
>
> procedure TfrmMain.Button1Click(Sender: TObject);
> type
> TCD2MP3Open = function : Boolean; stdcall;
> var
> hLib : THandle;
> CD2MP3Open : TCD2MP3Open;
> begin
> hLib := LoadLibrary(PChar(GetCurrentDir + 'CD2MP3Cd2mp3.dll'));
> if (hLib < 32) then begin
> MessageBox(Self.Handle, 'can''t Load Library', 'OK', mb_IconInformation);
> Exit;
> end;
>
> CD2MP3Open := GetProcAddress(hLib, 'CD2MP3Open');
> CD2MP3Open;
> FreeLibrary(hLib);
>
> end;
>