穿上你的回路帽......
我必须使用DDE(对不起,绝对没有选择)与工业控制系统进行通信。控制系统是DDE服务器,在与我的DDE客户端相同的Windows 7 PC上运行。客户端使用MfcDDE作为它的接口,然后调用DdeClientTransaction()
函数。
在调用MfcDDE与DdeClientTransaction(XTYP_ADVSTART
建立它们之后,DDE建议操作按预期工作。通过建议机制成功阅读所有感兴趣的数据点。
不幸的是,尝试通过DdeClientTransaction(XTYP_POKE)
函数写入数据失败了。在我的客户端中,DdeGetLastError()
会返回DMLERR_INVALIDPARAMETER (16390 0x4006)
。有趣的是,DDESpy(是的,我是绝望的)正在报告DMLERR_POSTMSG_FAILED (16396 0x400C)
。
客户端在其初始NT实现中工作,但在Win7下重建并运行,XTYPE_POKE
失败。我考虑过安全性和线程作为可能性。
我找不到NT和Win7之间DDE安全性变化的指点枪是不成功的。
如果重要,则DdeClientTransaction()
调用是在以WinMain()
调用AfxWinMain()
和CDialog::DoModal()
来启动客户端功能的主题中进行的代码。
感谢您提供任何帮助......
答案 0 :(得分:0)
确认DdeClientTransaction(XTYP_POKE)只能在调用DdeInitialize()的同一线程上调用。限制实际上可能与调用DdeConnect()的线程相同,但我的钱在DdeInitialize()上,因为返回的DDEIdInst传递给DdeConnect()。我错了。
感谢您让我与您一起解决这个问题...... :)