Я сломал голову, пока искал причину этой ошибки (4 дня)
- У меня есть сервер OPC DA, работающий на удаленной машине.
- Клиент OPC DA находится на другом компьютере.
в клиентской реализации я создаю внешний экземпляр через CoCreateInstanceEx()
HRESULT result = ::CoCreateInstanceEx(clsid, NULL, clsctx, sinptr, 1, &mqi);
PRINT_COMERRORIF(result, "CoCreateInstanceEx failed");
и он отлично работает, и я получаю указатель на удаленный сервер OPC (mqi.pItf
)
проблема возникает, когда я вызываю функцию advise()
интерфейса IConnectionPoint
Я указываю, что нашел точку подключения и возвращаю указатель на интерфейс IOPCShutdown (_MY_shutdown
) перед вызовом функции советую
result = server_object->QueryInterface(IID_IConnectionPointContainer
(void**)&connection_point_container);
PRINT_COMERRORIF(result, CTXID(this) "No IConnectionPointContainer interface");
result = connection_point_container->FindConnectionPoint(IID_IOPCShutdown, &_MY_shutdown);
PRINT_COMERRORIF(result, CTXID(this) "No IOPCShutdown connection point found");
result = _MY_shutdown->Advise(_MY_shutdown_callback, &_MY_shutdown_cookie); // HERE IS THE ISSUE
PRINT_COMERRORIF(result, CTXID(this) "IOPCShutdown::Advise Failed");
и я получил эту ошибку:
IOPCShutdown::Advise Failed : error 80040202
Я проверил настройку DCOM для обнаружения Настройка удаленных серверов OPC, и я сделал все, как описано, но никак ;(
Вот моя конфигурация:
Сторона сервера
- OPC DA Server installed and running
- local user account is created
- DCOM settings are configured as required
- Policy settings are configured as well
Сторона клиента
- OPC DA client interface installed.
- local user accounts are created on the both Nodes. Accounts have the same
name and passwords like on the server.
Брандмауэр отключен как на сервере, так и на клиенте.
::FindConnectionPoint()
возвращает указатель на интерфейс IOPCShutdown, если это поддерживаемый исходящий интерфейс, и этот результат не дал сбоев. проблема::Advise()
при попытке установить соединение между точкой подключения (последний указатель) и приемником клиента. Я не вижу источника этой проблемы - person Agnes   schedule 30.11.2020