Q&A

  • DLL내부에서 호출한 어플리케이션에 자료 전달?
제목이 좀 이상하죠? 한 마디로 질문을 요약하기가 좀 힘들군요...



제가 만들고 있는 어플리케이션에서은 기본적으로 여러개의 thread를 생성하게 됩니다. 최대 64개까지의 thread를 필요로 합니다. 그리고 thread가 생성되자마자 한 프로시저를 호출한 후 어플리케이션이 종료되기전까지 그 프로시저는 종료하지 않게 됩니다. 내부에서 무한 루프를 돌게됩니다.

그리고 그 프로시저는 외부의 델파이로 작성한 DLL 내부에서 export되 있어서 LoadLibrary로 DLL을 연다음 그 프로시저의 포인터를 GetProcAddress로 얻어내어 호출하게 됩니다.

그런데 제가 그 프로시저 내부에서 호출한 메인 어플리케이션으로 데이타(문자열이나 수치 등)를 전달할 필요가 있는데 어떠한 방법이 있는지 해결책을 좀 알려주세요?

제가 델파이를 접한지 얼마안되 기본 개념이 없거든요... 좀 구체적인 방법을 알려주시면 고맙겠습니다.

1  COMMENTS
  • Profile
    최용일 2000.03.09 07:06
    다음과 같이 메세지를 이용해서 전달하는것도 하나의 방법이 되리라 생각됩니다...

    DLL에서

    procedure SendData;

    var

    Hwnd: THandle;

    pData: Pointer;

    begin

    pData := ....;

    Hwnd := FindWindow('TForm1', 'Form1');

    if Hwnd <> 0 then

    SendMessage(Hwnd, WM_USER_SENDDATA), 0, Integer(pData))

    else

    ShowMessage('Receiver window not found.');

    end;



    어플리케이션내에서

    type

    TForm1 = class(TForm)

    ...

    public

    procedure WMUserSendData(var Msg: TMessage); message WM_USER_SENDDATA;

    end;



    procedure TForm1.WMUserSendData(var Msg: TMessage);

    var

    MyData: Pointer;

    begin

    MyData := @Msg.LParam;

    ...

    end;



    [JHN] wrote:

    > 제목이 좀 이상하죠? 한 마디로 질문을 요약하기가 좀 힘들군요...

    >

    > 제가 만들고 있는 어플리케이션에서은 기본적으로 여러개의 thread를 생성하게 됩니다. 최대 64개까지의 thread를 필요로 합니다. 그리고 thread가 생성되자마자 한 프로시저를 호출한 후 어플리케이션이 종료되기전까지 그 프로시저는 종료하지 않게 됩니다. 내부에서 무한 루프를 돌게됩니다.

    > 그리고 그 프로시저는 외부의 델파이로 작성한 DLL 내부에서 export되 있어서 LoadLibrary로 DLL을 연다음 그 프로시저의 포인터를 GetProcAddress로 얻어내어 호출하게 됩니다.

    > 그런데 제가 그 프로시저 내부에서 호출한 메인 어플리케이션으로 데이타(문자열이나 수치 등)를 전달할 필요가 있는데 어떠한 방법이 있는지 해결책을 좀 알려주세요?

    > 제가 델파이를 접한지 얼마안되 기본 개념이 없거든요... 좀 구체적인 방법을 알려주시면 고맙겠습니다.