I have function implementation of DDE client using Win Api in C#. Everything works fine in case that I call DdeInitializeW
and DdeConnect
in single thread.
Specifically, these are wrapper definitions:
[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
);
If I called DdeInitializeW
and DdeConnect
in different threads, DdeConnect
return null pointer.
Also, if I called both of them (established DDE connection) in one thread, I can't use this DDE channel in another thread (i'm getting INVALIDPARAMETER
DDE error).
As I said, everything works without problems in single thread.
C programming language is a machine-independent programming language that is mainly used to create many types of applications and operating systems such as Windows, and other complicated programs such as the Oracle database, Git, Python interpreter, and games and is considered a programming foundation in the process of ...
In the real sense it has no meaning or full form. It was developed by Dennis Ritchie and Ken Thompson at AT&T bell Lab. First, they used to call it as B language then later they made some improvement into it and renamed it as C and its superscript as C++ which was invented by Dr.
What is C? C is a general-purpose programming language created by Dennis Ritchie at the Bell Laboratories in 1972. It is a very popular language, despite being old. C is strongly associated with UNIX, as it was developed to write the UNIX operating system.
C is a general-purpose language that most programmers learn before moving on to more complex languages. From Unix and Windows to Tic Tac Toe and Photoshop, several of the most commonly used applications today have been built on C. It is easy to learn because: A simple syntax with only 32 keywords.
The behaviour you describe is expected.
DDE is tied to the individual thread. This is because DDE (which is generally considered a legacy technology) works internally by passing windows messages, and windows handles (HWND
) have thread affinity.
DdeInitializeW
from the same thread you call DdeConnect
. In other words you need to do your DDE from a thread which calls Application.Run
, or which frequently calls Application.DoEvents
at moments when it is appropriate for the events to be sent or received.
You can use DDE from more than one thread, but each must call DdeInitializeW
and replies will always be received on the thread the request was sent from.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With