У меня есть клиентское приложение DDE, которое подключается к приложению сервера DDE с помощью SendMessage()
WINAPI.После вызова SendMessage()
, который зависает при запросе соединения с сервером DDE.Как клиентское приложение DDE, так и серверное приложение находятся на VC ++.
SendMessage((HWND) -1,WM_DDE_INITIATE,(WPARAM) m_hWnd,MAKELPARAM(hService,hTopic));
Что теперь делает SendMessage()
, когда зависает?По сути, оно передает WM_DDE_INITIATE
оконное сообщение всем окнам в системе.Окно (сервер DDE), для которого оно предназначено, должно обработать сообщение и ответить с подтверждением.Как только подтверждение получено SendMessage()
вызов завершен и клиент подключен.
В нашем случае он зависает и никогда не возвращается обратно, в результате чего клиентское приложение DDE зависает.
Я искал в сети и обнаружил, что использование SendMessage()
для широковещательной передачи обычно не рекомендуется, поскольку оно много раз зависает.
У меня есть код для клиентского приложения DDE и приложения сервера DDE смне.
Дайте мне знать, есть ли какой-нибудь способ получить дескриптор окна сервера DDE или способ присвоения уникального имени окну сервера DDE.
Делая это, я полагаю на стороне клиентая могу получить дескриптор окна сервера DDE с уникального имени (используя FindWindow()
winapi) и вместо широковещания, используя SendMessage()
, я могу отправить сообщение непосредственно на сервер DDE, используя дескриптор окна.
Если вы чувствуете себя вышеметод получения дескриптора окна сервера DDE невозможен или не рекомендуется, поэтому дайте мне знать другой метод использования SendMessage()
winapi для подключения к серверу DDE.