使用XTYP_POKE调用DdeClientTransaction()时接收DMLERR_POSTMSG_FAILED

时间:2016-06-25 18:09:00

标签: windows-7 dde windows-nt

穿上你的回路帽......

我必须使用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()来启动客户端功能的主题中进行的代码。

感谢您提供任何帮助......

1 个答案:

答案 0 :(得分:0)

确认DdeClientTransaction(XTYP_POKE)只能在调用DdeInitialize()的同一线程上调用。限制实际上可能与调用DdeConnect()的线程相同,但我的钱在DdeInitialize()上,因为返回的DDEIdInst传递给DdeConnect()。我错了。

感谢您让我与您一起解决这个问题...... :)