私はWin ApiをC#で使用してDDEクライアントの機能を実装しています。私がDdeInitializeW
とDdeConnect
をシングルスレッドで呼び出す場合は、すべて正常に動作します。 は具体的には、これらは、ラッパーの定義です:C#Win Api DDE接続マルチスレッド
[DllImport("user32.dll")]
protected static extern int DdeInitializeW(ref int id, DDECallback cb, int afcmd, int ulres);
[DllImport("user32.dll")]
static extern IntPtr DdeConnect(
int idInst, // instance identifier
IntPtr hszService, // handle to service name string
IntPtr hszTopic, // handle to topic name string
IntPtr pCC // context data
);
私は別のスレッドでDdeInitializeW
とDdeConnect
と呼ばれる場合は、NULLポインタを返すDdeConnect
。
また、1つのスレッドで両方の(確立されたDDE接続)を呼び出すと、このDDEチャネルを別のスレッドで使用することはできません(INVALIDPARAMETER
DDEエラーが発生しています)。
私が言ったように、すべては問題なしでシングルスレッドで動作します。
これは私がこの時点で行っていることです。これはDDE自体の問題だと私は恐れていました。それで私を保証してくれてありがとう。 – Majak
また、まだやっていないのであれば、ヒント: 'DdeSetUserHandle'と' DdeQueryConvInfo'を使って、各会話に一意のIDを与えることで、複数のDDE会話を追跡してください。これにより、すべてが簡単になります。 https://msdn.microsoft.com/en-us/library/windows/desktop/ms648765(v=vs.85).aspx – Ben