Проблема с подключением к серверу OPC DA
От: plastictown Норвегия  
Дата: 13.08.19 15:41
Оценка:
Доброго времени суток! Года два назад написал OPC-клиент, который успешно функционировал со всем разнообразием OPC-серверов, предложенных ему. И вот появился на горизонте PcVue со своим OPC-сервером. Я нормально получаю CLSID и на CoGetClassObject() все заканчивается с кодом 0x80040154 "Class not registered". Причем другие OPC-клиенты, например, Matrikon OPC Explorer, нормально с ним работают. Может быть, есть мысль, почему так может быть? Спасибо!
ЗЫ: Все исключительно на локальной машине
opcda com
Re: Проблема с подключением к серверу OPC DA
От: VVV Россия  
Дата: 14.08.19 21:29
Оценка:
Здравствуйте, plastictown, Вы писали:

Я нормально получаю CLSID и на CoGetClassObject() все заканчивается с кодом 0x80040154 "Class not registered".

Не работал с этим и точно проблемы не знаю, но, в качестве предположения: попробуй другую битность, если сейчас собираешь под 64-бита, то попробуй под 32 или наоборот.
Re[2]: Проблема с подключением к серверу OPC DA
От: plastictown Норвегия  
Дата: 14.08.19 22:31
Оценка:
Здравствуйте, VVV, Вы писали:

VVV>Не работал с этим и точно проблемы не знаю, но, в качестве предположения: попробуй другую битность, если сейчас собираешь под 64-бита, то попробуй под 32 или наоборот.


Сегодня как раз занимался этим вопросом. Пробовал всякие варианты: 32 — 64, 32 — 32 и т.д. все, короче говоря. Видимо, дело не в этом. Главное, что записи в реестре есть (т.е. в AppID есть такой CLSID), а он говорит, что класс не зарегистрирован. М/б Есть какая-то дока,в которой прописано, что должно быть в реестре, чтобы это было 100% корректно? В этом случае можно будет сделать выводы в чем дело: в неправильной регистрации OPC-сервера или копать в другую сторону.
Re[3]: Проблема с подключением к серверу OPC DA
От: VVV Россия  
Дата: 14.08.19 23:00
Оценка:
Здравствуйте, plastictown, Вы писали:

Ну, проверить ещё CLSCTX:
REGDB_E_CLASSNOTREG
A specified class is not registered in the registration database. Also can indicate that the type of server you requested in the CLSCTX enumeration is not registered or the values for the server types in the registry are corrupt.
Re[4]: Проблема с подключением к серверу OPC DA
От: plastictown Норвегия  
Дата: 15.08.19 14:32
Оценка:
Здравствуйте, VVV, Вы писали:

VVV>Здравствуйте, plastictown, Вы писали:


VVV>Ну, проверить ещё CLSCTX:

VVV>REGDB_E_CLASSNOTREG
VVV>A specified class is not registered in the registration database. Also can indicate that the type of server you requested in the CLSCTX enumeration is not registered or the values for the server types in the registry are corrupt.

Серверы только локальные, использую CLSCTX_LOCAL_SERVER. Глянул дебагером, что там у Matrikon OPC Explorer в этом вызове, а там 5. Это получается CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER. При таких параметрах не работает вообще ничего. Я в замешательстве.
Re[5]: Проблема с подключением к серверу OPC DA
От: Vi2 Удмуртия http://www.adem.ru
Дата: 19.08.19 04:39
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Серверы только локальные, использую CLSCTX_LOCAL_SERVER. Глянул дебагером, что там у Matrikon OPC Explorer в этом вызове, а там 5. Это получается CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER. При таких параметрах не работает вообще ничего. Я в замешательстве.


Лучше бы выложил как зарегистрирован твой "PcVue с OPC-сервером" — было бы больше информации.

CLSCTX_LOCAL_SERVER требует наличия EXE сервера или DLL сервера в суррогате. В этом случае разрядность клиента и сервера не играет роли.

Если PcVue не откликается, то возможно:
— разные учётные записи
— у PcVue нет локального сервера, а есть только DLL (без суррогата)
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[6]: Проблема с подключением к серверу OPC DA
От: plastictown Норвегия  
Дата: 20.08.19 13:45
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Лучше бы выложил как зарегистрирован твой "PcVue с OPC-сервером" — было бы больше информации.


Там же много всякого. Нашел еще один сервер, который тоже ломается с такой же ошибкой.
Insat OPC

Мне кажется, я объясню хуже, чем если посмотреть на установленный. И так же Matrikon OPC Explorer нормально с ним работает,
а у меня все ломается тут:
::CoGetClassObject(clsid, CLSCTX_ALL, NULL, IID_IClassFactory, (void**)&class_factory_ptr);


Скачал исходники IndigoScada, там клиент opcda вообще не вызывает эту функцию. Я не силен в COM, но сколько я смотрел всяких туториалов, везде порядок действий примерно одинаковый.
Re[7]: Проблема с подключением к серверу OPC DA
От: Vi2 Удмуртия http://www.adem.ru
Дата: 20.08.19 16:26
Оценка:
Здравствуйте, plastictown, Вы писали:

P>Там же много всякого. Нашел еще один сервер, который тоже ломается с такой же ошибкой.

P>Insat OPC

Устанавливать я не буду, уж прости.

P>Мне кажется, я объясню хуже, чем если посмотреть на установленный. И так же Matrikon OPC Explorer нормально с ним работает,

P>а у меня все ломается тут:
P>::CoGetClassObject(clsid, CLSCTX_ALL, NULL, IID_IClassFactory, (void**)&class_factory_ptr);


Это обычный запрос: таких делается тысячи в день.

P>Скачал исходники IndigoScada, там клиент opcda вообще не вызывает эту функцию. Я не силен в COM, но сколько я смотрел всяких туториалов, везде порядок действий примерно одинаковый.


Ну значит вызывает некую CoCreateInstance, которая внутри уже сама вызывает CoGetClassObject.

Но...

Раз ты пишешь, что у тебя раньше работало, но с каким-то одним перестало, то проблема очевидно в регистрации этого какого-то одного. Вот эту цепочку, начиная с CLSID или ProgID, тем более что этот CLSID или ProgID ты знаешь, и нужно показать. Где-то в ветке реестра HKCR\<ProgID> или HKCR\CLSID\{<CLSID>} или где-нибудь в HKCU\Software\Classes\WOW6432Node.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.