组件中的事件怎么处理?

sanjiang 2002-09-24 08:45:34
事情描述:
应用程序主体是由Java编写,有一个外设是PDA,需要将它的数据传输到数据库中或者从数据库中取得数据。

PDA厂商提供了一个COM组件,它有几个接口函数来控制PDA上传或者下载数据。

我写了一个动态连接库(DLL),它的功能就是完成将PDA中的数据上传到本地PC形成文件,和取本地文件送到PDA中,DLL里面调用了这个COM组件。

COM组件通过包容,内包了一个COM组件,外面这个COM组件创建一个隐含窗口,接收内包的COM传送的消息,然后将参数记载到一个变量中保存,再通过一个接口函数查询得到这个变量。
外包的这个COM里面创建了一个事件(event1),在在变量更新的时候将这个事件set一下(实际使用的是plus)。

在DLL中创建一个辅助线程,里面openevent1,然后等待这个事件,等到事件之后通过接口函数查询得到COM中的变量值。
在DLL的主线程里面创建一个事件(event2),在辅助线程退出的时候setevent2使主线程继续,然后waitforsingleobject(event2),也就是要在这个函数里面等待辅助线程结束。

这样做从理论上来讲是没有问题的,但是实际上这样做之后,wait(event1)会超时。
如果不使用event2,而用类似messagebox的方式使主线程挂起,则wait(event1)就没有问题,可以等到。

需要说明的是这个dll被Java的Applet调用,dll调用COM组件的函数。


上面所叙述的是一种解决办法中遇到的问题,如果能说在DLL中可以直接进行消息循环,接收COM发送的消息,那么就不再需要外包的那个COM了,相应的麻烦事也就没了。

你觉得问题可能会处在什么地方呢?有没有解决办法?

...全文
22 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
masterz 2002-09-24
http://www.alphaworks.ibm.com/tech/bridge2java
  • 打赏
  • 举报
回复
相关推荐
发帖
ATL

3233

社区成员

ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
帖子事件
创建了帖子
2002-09-24 08:45
社区公告
暂无公告