Связка MyVBAplication + MyDLL + MyDDEProcessC++

Рейтинг: 0Ответов: 1Опубликовано: 22.06.2011

Стоит такая задача: В консольном приложении на С++ написан DDE сервер, который получает от стороннего приложения данные(в виде массива), требуется привязать DDE сервер к приложению написаному на VB

1) Мои размышления были такие - скомпилировать код DDE сервера в DLL, которую затем подключу к VB, но DLL это набор функций, и если к примеру я буду запускать сервер который размещён в DLL, используя функцию StartMyDDEServer(...) то я не получу возврат из этой функции, по причине того, что в DDE сервере реализован цикл обработки сообщений, следовательно чтобы получить возврат из функции нужно запустит отдельный поток, и выйти из функции, опять НО! Как только я выйду из функции как мне кажется принудительно закроется поток в котором будет работать сам сервак! Что делать!?

2) Второе что пришло на ум, консольное приложение DDE запустить как невидимый процесс, и ещё написать DLL для связи этого процесса (сервера) с приложением на VB. Здесь вообще тёмный лес. Как реализовать невидимый процесс (желательно иконку в системном трее), и как связать функции DLL c этим процессом!?

Требуется мнение и совет спецов! :)

Ответы

▲ 2Принят

по п.2

  • иконка в трее реализуется достаточно просто. Реализуется это через ф-цию Shell_NotifyIcon. В любом случае окну будут посылаться WM* сообщения, которые нужно обрабатывать.
  • DDE в самой программе работает через обработку сообщений WM* :-) При этом Вы сами определяете какие вызовы Вы обрабатываете. Поэтому в DLL просто пишете вызовы SendMessage с нужными ключами WM_DDE_*. Что-то в духе такого. А уже из прикладной программы вызываете нужные ф-ции библиотеки все в ажуре :-)
  • если необходимо убрать основное окно программы, то насколько я помню, ему можно сделать SW_HIDE, правда уберет ли окно из списка задач на панели задач - не уверен. Способы сокрытия окон еще описаны тут