Ich habe Funktion Implementierung von DDE-Client mit Win Api in C#. Alles funktioniert gut, wenn ich DdeInitializeW
und DdeConnect
in einem Thread aufrufen. Insbesondere sind diese wrapper Definitionen:C# Win Api DDE Verbindung Multithread
[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
);
Wenn I DdeInitializeW
und DdeConnect
in verschiedenen Threads aufgerufen, DdeConnect
return NULL-Zeiger.
Wenn ich beide (etablierte DDE-Verbindung) in einem Thread aufgerufen habe, kann ich diesen DDE-Kanal nicht in einem anderen Thread verwenden (ich bekomme INVALIDPARAMETER
DDE-Fehler).
Wie gesagt, im Single Thread läuft alles ohne Probleme.
Genau so mache ich es in diesem Moment. OK, ich hatte Angst, dass dies ein Problem von DDE selbst ist. Vielen Dank, dass Sie mich darin unterstützt haben. – Majak
Tipp auch, wenn Sie es noch nicht tun: Behalten Sie mehrere DDE-Konversationen im Auge, indem Sie jeder Konversation eine eindeutige ID geben, indem Sie 'DdeSetUserHandle' und' DdeQueryConvInfo' verwenden. Das vereinfacht alles sehr. https://msdn.microsoft.com/en-us/library/windows/desktop/ms648765(v=vs.85).aspx – Ben