отправлять команды в приложение из Excel? COM? - PullRequest
1 голос
/ 29 декабря 2008

Я написал контроллер устройства (rs232), и он успешно используется, однако пользователи хотят просматривать данные и управлять устройством (или, возможно, общаться через мою программу) из Excel. Я отклонил DDE как опцию и обнаружил, что RTD (IRtdServer), вероятно, является хорошим началом (хотя нет способа отправить данные обратно на «сервер» из клиента данных в реальном времени).

Я нашел эти ресурсы для части RTD: http://support.microsoft.com/?id=327215 а также http://support.microsoft.com/?id=327215

Это многопоточное приложение, и я уже добавил возможность иметь несколько прослушивателей на COM-порту, чтобы можно было обновлять несколько клиентов. Я добавлю интерфейс COM в EXE.

Но после этого мне нужен какой-то способ управления командами приложения / прокси на устройстве через приложение из Excel.

Какой лучший способ сделать это?

Возможно, другой интерфейс COM и вызов его из VBA или что-то? Я не знаком с использованием сценариев из Excel, поэтому, возможно, кто-то может предложить пример кода или ссылки, которые показывают и код для COM-объекта и сопровождающий код VB (A?)?

Имейте в виду, что это неуправляемое приложение C ++, и его сейчас нельзя преобразовать в управляемое или C #. Также приветствуются альтернативы, использующие C #, но это долгосрочное переписывание.

Спасибо

EDIT У меня есть альтернатива для добавления поддержки COM в существующий EXE. Я думаю, что более гибко добавить двустороннюю связь (кроссплатформенную - может быть, boost или corba или просто прямой IP на основе моего собственного протокола сообщений)

COM-сервер (или два) может обернуть этот канал связи - каким бы он ни был. Это на самом деле не влияет на мой вопрос - я все еще хотел бы знать варианты управления внешним EXE из Excel.

EDIT Отсутствие необходимости развертывания .NET для клиентов также является большим плюсом. многие из этих устройств находятся на компьютерах, которые являются довольно старыми и имеют, возможно, NT или XP на них, и я не рад увеличению моего пакета установки / установки с 700 КБ до смешного размера установки .NET ...

Ответы [ 2 ]

1 голос
/ 29 декабря 2008

Вызов COM-объекта из VBA прост. Этот SO вопрос и мой ответ дают пример того, как создать COM-объект. Вызов открытых методов, как и следовало ожидать:

object.ExposedMethod(optional params...);
1 голос
/ 29 декабря 2008

Вариант № 1:

Создайте небольшой COM-сервер - убедитесь, что его интерфейсы подходят для сценариев со встроенным движком Visual Basic в Excel. (например, используйте простые типы и BSTRS).

Напишите макросы Excel VB, чтобы (1) добавить собственную панель инструментов в Excel и (2) вызвать свой COM-сервер.

Вы также можете добавлять кнопки и другие элементы пользовательского интерфейса на листы и связывать их с макросами VB.

Вариант № 2:

Я понимаю, что вы не хотите использовать C #, но автоматизировать офис и общаться с COM-объектами действительно очень легко в C # с помощью Visual Studio Tools for Office (VSTO). Вы действительно должны изучить эту опцию - если все сделано правильно, это не должно означать переписывание какого-либо существующего кода. Просто используйте C # и VSTO в качестве моста между Excel и вашим RTD-сервером. Как и в случае с VB, это прямое ограничение для подключения элементов пользовательского интерфейса в Excel к C #, а затем к вашему RTD-серверу.

...