• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 进程外COM为什么会影响DDE通信?(现在我的可用分太少了,以后会加分。)

进程外COM为什么会影响DDE通信?(现在我的可用分太少了,以后会加分。)

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了 进程外COM为什么会影响DDE通信?(现在我的可用分太少了,以后会加分。)等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 进程外COM为什么会影响DDE通信?(现在我的可用分太少了,以后会加分。)
描述:

我的程序既是COM的客户端,又是DDE客户端。当不连接COM服务器时,DDE通信正常;连接COM服务气后,DDE通信的消息全部收不到了。
敬待高手解答。


解决方案1:

由于使用的是COM进程外服务器,楼主的主程序是使用代理来和COM服务器通信的。由于楼主的客户和服务器都是在同一台机子上,所以楼主的主程序中的代理使用的是LPC(本地过程调用)来实现和服务器的通信,而不是RPC(远程过程调用)。
当楼主调用接口的一个函数来传递数据时,调用线程实际调用的是DLL代理中的函数,该函数再通过LPC请求COM服务器调用这个函数,这里就是问题的关键。因为是同步请求(也只能同步),这时调用线程(也就是主程序中的线程)将处于挂起状态,以等待服务器完成请求返回。注意这里只是处于挂起状态,实际线程并没有挂起,而是构建一个模式循环(也就是我前面提到过的模式对话框里所干的事),不停的GetMessage,直到特定的消息(也就是服务器请求完成的通知)到达。如果这时有DDE消息,将会被这个模式循环给滤掉,因此收不到消息。也就是说,在调用COM接口函数前发出的还未处理的DDE消息都将被滤掉,在调用COM接口函数后的则没有问题。
我在MSDN中没有找到有关LPC的资料,所以上面关于LPC等待服务器回答的方式(使用模式循环)只是我个人猜测,不过我认为其有很大的可能性使用模式循环(不使用内核对象来同步),因为使用模式循环(也就是个消息循环)不用切换用户模式和内核模式,可以减少不必要的浪费,并且不用考虑内核对象的释放及传递问题。
如果上面的猜测正确,那么楼主就需要将你的COM服务器改成进程内服务器,即使使用了代理也不会出现上面问题。因为进程内服务器的代码在同一个地址空间下,调用线程可以直接执行。
或者,由于楼主使用的是DDEML,并非DDE,所以可以使用异步Transaction(也就是楼主所说的DDE消息)。MSDN中说使用异步Transaction时,可以同时执行Transactions。言外之意(它没明说,万一不是那就没效了)就是说对于每个Transaction都回生成一个线程以调用相应的回调函数,因此不是基于消息机制的,也就没有上面的问题。
不过我原来从没有编过DDE方面的程序(说实话,回答这帖子之前我都不会DDE),所以上面关于使用异步能否有效我也就不清楚了,只是给楼主提个建议。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 进程外COM为什么会影响DDE通信?(现在我的可用分太少了,以后会加分。)

相关文章

  • 2017-06-05 请教IOCP线程访问动态数据多CPU线程同步!!
  • 2017-06-04 CListCtrl刷新问题
  • 2017-06-04 一个关于excel问题的求助
  • 2017-06-05 如何实现两条线程之间的消息传递。(Win32API)
  • 2017-06-04 菜鸟提问:com中包容,聚合和继承之间的联系和区别
  • 2017-06-05 ActiveX控件初始化写在什么地方?
  • 2017-06-04 atl制作com编译Win32ReleaseMinDependency出现以下问题求解。
  • 2017-06-04 请问下qq中专站原理
  • 2017-06-05 我在调试程序的时候,出现了下面的异常警告,需要处理这些异常告警吗?不处理的话,会不会使程序异常终止?
  • 2017-06-05 WindowlessRichEdit中,怎样实现对Bitmap,gif图片等OLE对象的复制粘贴?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 大家好,请假一个关于VC调用MediaPlay的问题
    • cwebbrowser无法正常完全显示网页!
    • 如何自动选择动态生成的列表框?
    • 本人一直迷惑不解在C/C++中的mainop1,op2不知如传递实参
    • IE中调用ActiveX的问题!!!
    • 各位大哥,那位能帮忙看看这个问题!在ATL中是否能够插入WebBrowser或其他什么能显示Html文件的控件么?
    • ActiveX控件嵌入WEB页面中,浏览器刷新时,将调用控件的什么接口?
    • 各位看看,为什么获取不了Excel的链接点接口?
    • mfcdll中使用shockwaveflashobject控件遇到问题很纠结请大家帮忙!
    • 请教一个关于字体的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有