COM으로 Event를 올리는 프로그램을 작성하려고 합니다.
그냥 Event를 올려서 사용하면 Event가 잘 올라오는데...
Thread를 사용하여 올리면 잘 올라오지 않네요.
고수님의 한수를 부탁드립니다.
기본적으로 델파이에서 제공되는 Automation Dll server만드는 과정은 동일하고...
Generate Event Support Code를 check하여 작성한 것입니다.
IDL은 다음과 같고...
interface IEventInf: IDispatch {
HRESULT _stdcall SendText([in] BSTR text );
};
dispinterface IEventInfEvents {
HRESULT OnText([in] BSTR text );
};
coclass EventInf
{
[default] interface IABC;
[default, source] dispinterface IABCEvents;
};
-----------------------------------------------------
서버프로그램에서 다음과 같이 작성하면 이벤트가 잘 올라가는데...
procedure TEventInf.SendText(const text: WideString);
begin
FEvents.OnText(Text);
end;
-----------------------------------------------------
이걸 다음과 같이 변경하였습니다.
procedure TEventInf.SendText(const text: WideString);
var
thread : TEventThread;
begin
thread := TEventThread.Create(true);
thread.Resume();
end;
procedure TEventInf.FireEvent(const text : String);
begin
if FEvents <> nil then
FEvents.OnText(Text);
end;
쓰레드를 생성하는 Unit은 다음과 같습니다.
procedure TEventThread.Execute;
var
i : Integer;
begin
TEventInf(ComServer).FireEvent('Help me');
end;
뭐가 잘못됐는지 잘 모르겠습니다. ComServer를 casting해서 실제 TEventInf.FireEvent가 call되는 것 까지는 확인이 됐는데... client sink가 call되지 않습니다.