Q&A

  • COM의 Event에 대해...
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되지 않습니다.



0  COMMENTS