С# Автоматизация OPC дает 80040154

Я .Net-разработчик. Новое в ОПК. Когда я пробовал некоторые образцы OPC-клиента, все они выдавали эту ошибку. Кажется, DLL не зарегистрирована. Но я не знаю, как и где это прописать.

error: retrieving the COM class factory for component with CLSID failed due to the following error: 80040154

Даже я пробовал это

regsvr32 Interop.OPCAutomation.dll", 

но он также выдает ошибку, например

The module "Interop.OPCAutomation.dll" was loaded but the entry-point DllRegisterServeer was not found.
Make sure that "Interop.OPCAutomation.dll" is a valid DLL or OCX file and then try again.

Я просмотрел очень много существующих форумов. Многие из них сказали изменить целевую платформу на x86, и у меня все еще та же проблема. К вашему сведению, я вижу только «Активен (любой процессор)» в опции «Платформа» в верхней части вкладки «Сборка» свойств проекта.

Вот подробности моей среды:

.Net 2005
OPCAutomation Weapper
Windows 7 64-bit OS
Dell Inspiron 1525 (I hope this is not a 64bit machine, but my engineer installed 64bit OS somehow).

Помогите мне, пожалуйста.

Заранее спасибо!


person Abu Sithik    schedule 20.02.2012    source источник
comment
вы уверены, что dll, которую вы пытаетесь зарегистрировать, является OCX, если это так, или если это неуправляемая DLL COM, попробуйте regsrv32, если нет, то все, что вам нужно сделать, это добавить ссылку на эту .dll .. если это не так не работает, затем перекомпилируйте проект и установите для вашего .x86 значение x64.   -  person MethodMan    schedule 20.02.2012
comment
@DJKRAZE Спасибо, что уделили мне время. Я не уверен насчет dll, что это OCX, но это обычная библиотека, которую используют все. Я загрузил пример проекта, который включает этот DLL-файл. Также пробовал regsrv32, вылезла вышеописанная ошибка. Я уже добавил ссылку на DLL и проверил, без разницы. Наконец, как вы сказали, я установил цель на x64 и попробовал, но никаких улучшений.   -  person Abu Sithik    schedule 20.02.2012
comment
Какая у вас ОС, 32-битная или 64-битная? а как насчет GAC, добавлена ​​ли в GAC Interop.OPCAutomation.dll?   -  person MethodMan    schedule 20.02.2012
comment
Моя ОС 64-битная. Я понятия не имею о GAC. извините и пожалуйста помогите.   -  person Abu Sithik    schedule 20.02.2012
comment
есть утилита GAC, которую вы можете использовать для регистрации/добавления dll в глобальный кэш сборок.. выполните поиск Google для GAC..   -  person MethodMan    schedule 21.02.2012
comment
Привет @DJKRAZE Когда я пытаюсь добавить Interop.OPCAutomation.dll в сборку, появляется эта ошибка: Ошибка добавления сборки в кэш: попытка установить сборку без строгого имени   -  person Abu Sithik    schedule 21.02.2012


Ответы (6)


На всякий случай, если кто-то имеет дело с этой проблемой (как я недавно...), я справлюсь с этим! Через какое-то время я узнал, что дело в .NET framework, работающем на 64-битных машинах. Поскольку приложение .NET работает только с 32-разрядной CLR, мы должны настроить .NET Framework для загрузки CLR в режиме WOW. Для этого введите:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Ldr64.exe SetWow

После этого вы сможете запускать приложения.

Вы можете вернуться и вернуть .NET Framework в прежнее состояние, набрав:

C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\Ldr64.exe Set64
person guiu    schedule 05.09.2012

Если используется OPC Client Toolkit SDK (C++), проблема со службой удаленного реестра также может вызвать эту ошибку.

В Windows 7 по умолчанию служба удаленного реестра работает вручную и не запускается. Убедитесь, что служба удаленного реестра запущена на всех машинах, на которые вы хотите выполнить развертывание. Это можно сделать вручную или с помощью групповой политики.

Функция GetCLSIDFromRemoteRegistry() использует RemoteRegistryService для получения CLSID сервера OPC. Если эта служба не запущена на клиентской машине, программа OPC может вернуть ошибку 80040154.

person user3673829    schedule 30.08.2014
comment
При работе с другими клиентами OPC необходимо вручную указать ClsId, если служба удаленного реестра не запущена. - person mstrthealias; 03.12.2014

Ошибка, которую вы получаете, более чем вероятна из-за неправильной регистрации сервера OPC. Убедитесь, что он зарегистрирован (обычно запустив его в командной строке с параметром «/regserver» или «/service»). Также могут быть проблемы с безопасностью, и в этом случае вам придется запустить «dcomcnfg» (DCOM Config), чтобы убедиться, что клиент имеет доступ к серверу.

person Ken    schedule 20.02.2012
comment
Он думает, что обертка — это сервер. Возможно, вы захотите расширить это. - person Hans Passant; 21.02.2012
comment
Я прошел через конфигурацию DCOM. Я вижу так много компонентов системы. Есть ли какой-либо конкретный компонент, который я должен проверить для OPC-сервера? - person Abu Sithik; 21.02.2012

Этот вопрос немного устарел, поэтому я надеюсь, что вы уже поняли это, но у меня была точно такая же проблема, и я хотел поделиться своим решением. В моем случае я использую сервер Kepware. Если вы скомпилируете и попытаетесь запустить клиентское приложение для этого сервера с помощью Interop.OPCAutomation на машине, на которой не установлен сервер, вы получите ошибку dll not Registered и «точка входа не найдена», если вы попытаетесь зарегистрировать dll вручную.

Решение. Убедитесь, что сервер установлен и работает.

person Scott Solmer    schedule 19.09.2013

Хотя это старый пост, я хотел бы поделиться своим решением.

Моя проблема заключалась в том, что когда я пытался установить приложение с OPCAutomation.dll, оно выдавало ошибку 80040154, поскольку класс не был зарегистрирован.

Это мое решение, всегда с правами администратора:

  1. Скопируйте OPCDAAuto.dll в папку «C:\Windows\System32».
  2. В командной строке введите «C:\Windows\System32\regsvr32 opcdaauto.dll».
  3. Вы должны посмотреть сообщение вроде этого: image

Надеюсь это поможет!

person Victor Flexo    schedule 29.11.2016

Доллар OPC работает только в 32-разрядных версиях, мое решение состояло в том, чтобы изменить «Включить 32-разрядные приложения» на «Истина» в дополнительных настройках соответствующего пула приложений в IIS.

Пул приложений

Расширенное определение пула приложений в IIS

person Adrian    schedule 19.04.2017