Ho implementazione della funzione del client DDE utilizzando Win Api in C#. Tutto funziona bene nel caso in cui io chiami DdeInitializeW
e DdeConnect
in thread singolo. In particolare, questi sono definizioni involucro:C# Win Api DDE connessione 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
);
Se ho chiamato DdeInitializeW
e DdeConnect
in diversi thread, DdeConnect
ritorno puntatore nullo.
Inoltre, se ho chiamato entrambi (connessione DDE stabilita) in un thread, non posso usare questo canale DDE in un altro thread (sto ricevendo l'errore DDE INVALIDPARAMETER
).
Come ho detto, tutto funziona senza problemi in thread singolo.
Questo è esattamente come lo sto facendo in questo momento. OK avevo paura che questo fosse un problema di DDE stesso. Grazie mille per avermi assicurato. – Majak
Inoltre, mancia se non lo stai già facendo: tieni traccia di più conversazioni DDE dando a ogni conversazione un ID univoco, usando 'DdeSetUserHandle' e' DdeQueryConvInfo'. Questo semplifica tutto molto. https://msdn.microsoft.com/en-us/library/windows/desktop/ms648765(v=vs.85).aspx – Ben