也问个关于Atl事件触发的问题

TomHeJerry 2007-06-28 11:42:29
我使用ATL制作不带界面的ActiveX dll时,在其中增加了连接点对象。现在的问题是。我需要在自定义的类中触发该事件。请问大虾们,我该怎么做呀。


查了些资料。一般都是使用PostMessage的方法。但因为我是菜鸟。还请大虾们给点代码参看参考哦。比如我怎么使用PostMessage方法。使用后,调用GetMessage该怎么调用。

下面是我的代码,麻烦大家给看看。

//这是在自己定义的类中的处理方法。
void CNumberMethod::Add( long a, long b )
{
long n = a + b;
UserStruct *UserData = new UserStruct();

UserData->nResult = n;
UserData->userType = 1;
::PostMessage( NULL , (UINT)UserData, NULL, NULL );
}

//下面是一个线程中执行的函数。不断查询系统消息。
DWORD CRaiseEvent::FireEvent()
{
LPMSG msg;
UserStruct *UserData;

try
{
while( TRUE )
{
if( ::GetMessage( msg, NULL, NULL, NULL ) )
{
UserData = (UserStruct *)msg->message;
::MessageBox( NULL, _T(""), _T(""), NULL );
Fire_AddResult(UserData->nResult );
}
}
}
catch( ... )
{
return -1;
}
return 0;
}


当执行到if( ::GetMessage( msg, NULL, NULL, NULL ) )这里时,就没有反应了。在客户端调用也没有触发事件。请问为什么呀
...全文
295 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
robotom 2007-12-12
  • 打赏
  • 举报
回复
程序逻辑结构严重混乱。
KevinJHoo 2007-12-05
  • 打赏
  • 举报
回复
都什么时候的了。。。
wy2001wy 2007-12-04
  • 打赏
  • 举报
回复
什么呀,这么乱。
ATL写出来的东西不能叫ActiveX。
事件是要从ATL COM中调用FireXXX发出的,然后在客户端实现sink对象,来接收事件。
Sanvy4116 2007-12-04
  • 打赏
  • 举报
回复
楼上两位说得对,建议你去看看IConnectionPoint相关的内容
eduyu 2007-07-01
  • 打赏
  • 举报
回复
sink对象会查询你的IConnectionContainer接口,并注册自己的接口指针给你。
wshcdr 2007-07-01
  • 打赏
  • 举报
回复
应该在客户端的类中实现SINK,而不是用消息泵

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧