Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: COM/DCOM/ActiveX/ATL/CORBA > c# OPC Client


Автор: Alexander8111 30.6.2016, 11:30
Уважаемые специалисты, - 
уже создал данную тему  в разделе .Net, но вижу, что темы связанные с OPC тут так сказать периодически более активны, - поэтому повторю свой вопрос в данном разделе форума.
------------------------------------------------------------------------------------------------
В коде c# я подключаюсь к некому OPC серверу сети Bacnet (ID сервера JC.BNOPC). Данный код успешно подключается ко всем другим OPC серверам, которые мне приходилось использовать до этого, а в случае с этим сервером выдаются исключения:
- The COM Server does not support the interface
или
- OPC.ResultIdException: E_Fail
Исключения зависит от того какие dll я использую с сайта OPC foundation. Они собственно одинаковые (даты выпуска только разные) - это OpcNetApi.dll и OpcNetApi.Com.dll 
Колдовал много с настройками DCOM (так как гугл советует) - но все без толку.
Ниже приложен скрин проблемы. Всем благодарен за помощь smile 

Автор: jsharp36 1.7.2016, 22:45
Побуду за капитана очевидность. Вряд ли здесь кто подробнее объяснит.

Не работал никогда с этими серверами. Но Вам ясно пишет эксепшин - COM-сервер не поддерживает данный интерфейс.
Т.е. у вас несовместимые дотнетовские dll с данным ком-сервером. Советы очень общие, не знаю, применимы в Вашем случае или нет - зависит от сложности кода-провайдера (на дотнете).

Очень кратко. Вдруг кто не знает. COM-сервера представляют собой до-дотнетовский способ коммуникаций между разным кодом у майкрософта. Двоичный код выставляет наружу интерфейсы (подобные по сути, как интерфейсы в дотнете). Но какого-то серьезного механизма версионности там нет. Когда подключаетесь к такому серверу, подключаетесь на свой страх и риск, может случиться, что ваш код по сигнатурам вызова функций не совпадет.
Что и случилось.

Обычно для таких серверов пишут библиотеки на дотнете, которые уже вы используете. В этих библиотеках скрыт механизм вызовов com-сервера.

Выход такой.
1. Искать адекватную вашему серверу библиотеку на дотнете.
2. Если 1 не получается, то найти исходники неправильной библиотеки на дотнете, разобраться и исправить под ваш COM-сервер, а до этого узнать, что за интерфейсы у вашего com-сервера.

Извините, если пишу очевидности и ответ бесполезен. Вообще, на дотнете редко найдешь специалиста, который бы работал с com-серверами и понимает что это такое

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/c-OPC-Client-id5774d88aae2015be2c8b4567#findElement_E7045_5776c850ae20155d61935e03_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)