Q&A

  • [질] DLL 폼과 Modal의 관계? (소스)
다음과 같은 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;



2  COMMENTS
  • Profile
    쩌비 2001.09.02 06:39
    이건 여러가지 방법이 있어요..



    제가 주로 쓰는 방법은 커스텀 핸들을 사용하는 방법입니다.



    즉 커스텀 핸들을 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;

    >

  • Profile
    김춘성 2001.09.02 23:22


    초보라 무슨 말이징 이해가 안가요...

    Sendmessage PostMessage?? 이게 뭔가요??

    어떻게 간단한 예제라도 구할 수 없을까요?

    방법이 많다는데...

    어디서 구할수 있는지 그것만이라도 가르쳐 주세요... 제발





    쩌비 wrote:

    > 이건 여러가지 방법이 있어요..

    >

    > 제가 주로 쓰는 방법은 커스텀 핸들을 사용하는 방법입니다.

    >

    > 즉 커스텀 핸들을 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;

    > >