제목이 좀 이상하죠? 한 마디로 질문을 요약하기가 좀 힘들군요...
제가 만들고 있는 어플리케이션에서은 기본적으로 여러개의 thread를 생성하게 됩니다. 최대 64개까지의 thread를 필요로 합니다. 그리고 thread가 생성되자마자 한 프로시저를 호출한 후 어플리케이션이 종료되기전까지 그 프로시저는 종료하지 않게 됩니다. 내부에서 무한 루프를 돌게됩니다.
그리고 그 프로시저는 외부의 델파이로 작성한 DLL 내부에서 export되 있어서 LoadLibrary로 DLL을 연다음 그 프로시저의 포인터를 GetProcAddress로 얻어내어 호출하게 됩니다.
그런데 제가 그 프로시저 내부에서 호출한 메인 어플리케이션으로 데이타(문자열이나 수치 등)를 전달할 필요가 있는데 어떠한 방법이 있는지 해결책을 좀 알려주세요?
제가 델파이를 접한지 얼마안되 기본 개념이 없거든요... 좀 구체적인 방법을 알려주시면 고맙겠습니다.
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로 얻어내어 호출하게 됩니다.
> 그런데 제가 그 프로시저 내부에서 호출한 메인 어플리케이션으로 데이타(문자열이나 수치 등)를 전달할 필요가 있는데 어떠한 방법이 있는지 해결책을 좀 알려주세요?
> 제가 델파이를 접한지 얼마안되 기본 개념이 없거든요... 좀 구체적인 방법을 알려주시면 고맙겠습니다.