我使用ATL实现了一个COM EXE,其中有两个连接点方法:
IDL定义如下:
dispinterface _IControlEvents
{
properties:
methods:
[id(1), helpstring("method TimeOut")] HRESULT TimeOut(BSTR str);
[id(2), helpstring("method ElapsSeconds")] HRESULT ElapsSeconds(int Sec);
}; [
uuid(A11E2A3E-1306-4BB2-8E4A-7316315374B6),
helpstring("Control Class")
]
coclass Control
{
[default] interface IControl;
[default, source] dispinterface _IControlEvents;
//以下为手动添加其他接口
interface IConfigure;
interface IDataStatus;
//添加结束!
};
在生成的CControl类的任何方法中,我调用Fire_TimeOut和Fire_ElapsSeconds都能正确传输到客户的Sink接收器中去,但如果我在COM EXE中创建一个线程(比如MyThreadFunc) ,然后在MyThreadFunc中调用p->Fire_TimeOut或p->Fire_ElapsSeconds,其中p指向CControl的指针(this),这样在接收器无论如何都无法接收到事件,请问这是什么原因?