帰りの帽子をかぶって...
産業用制御システムと通信するには、DDE を使用する必要があります (申し訳ありませんが、これにはまったく選択肢がありません)。制御システムは DDE サーバーであり、DDE クライアントと同じ Windows 7 PC 上で実行されます。クライアントは、MfcDDE をインターフェイスとして使用し、DdeClientTransaction()
関数を呼び出します。
MfcDDE を呼び出して DDE アドバイス操作を確立した後、DDE アドバイス操作は期待どおりに機能します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()
あなたが提供できる助けをありがとう...