0

戴上你的退路帽...

我必须使用 DDE(对不起,在这方面绝对没有选择)与工业控制系统进行通信。控制系统是 DDE 服务器,运行在与我的 DDE 客户端相同的 Windows 7 PC 上。客户端使用 MfcDDE 作为它的接口,然后调用DdeClientTransaction()函数。

DDE 建议操作在调用 MfcDDE 以使用DdeClientTransaction(XTYP_ADVSTART) 建立它们后按预期工作。通过建议机制成功读取所有感兴趣的数据点。

不幸的是,尝试通过该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()客户端的功能代码开始。

感谢您的任何帮助,您可以提供...

4

1 回答 1

0

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

谢谢你让我和你们一起解决这个问题...... :)

于 2016-06-25T23:00:43.677 回答