Здравствуйте! Первоначально делал в обычном приложении. Соединялся с DDE-сервером и по DdeClientTransaction (тип XTYP_REQUEST) без проблем читал Item. Теперь перенес это все в службу. Код обращения к DDE-серверу один в один, но DdeClientTransaction выполняется с ошибкой DMLERR_DATAACKTIMEOUT. Таймауты ставил разные.Создается впечатление, что он вообще не ждет. Даже 20000 миллисекунд ставил, а ошибку сразу дает. Перерыл весь инет, но ничего путного не нашел. С сервером соединяется без ошибок через DdeConnect, а DdeClientTransaction не проходит. Может быть кто-то поможет разобраться, или хотя бы подскажет направление где копать. Заранее благодарен.
Небольшое дополнение. Использую не чистый DDE, а NetDDE, т.е имя службы DDE-сервера в виде \\Имя компьютера\NDDE$ . Все настройки для подключения делал через ddeshare. В обычном приложении все прокатывает, а в службе - нет. Теперь попробовал подключиться к DDE-серверу на этой же машине. Имя службы указал несетевое. Обычное приложение также подключалось, а служба даже не подключается. Ошибка DMLERR_NO_CONV_ESTABLISHED.
DDE Shares [Network DDE is no longer supported. Nddeapi.dll is present on Windows Vista, but all function calls return NDDE_NOT_IMPLEMENTED.] оч слжн разб-ть кодесы на гипотетическом уровне. откуда импортируете функции? ddeml.dll - юзермодная
Система не Vista. Код абсолютно любой с функциями Dde ведет себя так в службе. Функции импортируются из user32. ddeml еще и 16-разрядная . Есть версия по поводу параметра PCONVCONTEXT pCC в DdeConnect. Раньше всегда оставлял его пустым. Да и в инете во всех примерах он пустой. К стыду своему за 18 лет программирования с DDE работал очень мало, а в службах - никогда ранее. Там в CONVCONTEXT есть SECURITY_QUALITY_OF_SERVICE и скорее всего она должна быть для службы не пустая. Проверю. Нет. Видимо дело в чем-то другом...
Все понял. Сам механизм DDE работает с оконными сообщениями. Отсюда вывод, что DDE нельзя использовать в службе.