У меня есть сервер Elipse E3 Studio (сборка 5.0.434) с кучей тегов (работающих на Windows x64), и я хочу читать из консольного приложения .NetCore (3.0) (на той же машине). Дело в том, что Elipse работает с COM (насколько я знаю), а .NetCore не может изначально справиться с этим. Нужно использовать библиотеку взаимодействия или что-то еще. .netCore3.0 Замечания по выпуску в Windows Native Interop
Чтобы заставить работать сервер Elipse, я использовал клавишу, чтобы сервер работал локально. Я назвал свой тег «A1» и установил значение внутри Elipse. Чтобы сделать доступ, я создал программу на C # с использованием e3DataAccessLib и сослался на нее в .csprj. Program.cs выглядит следующим образом:
using System;
using E3DATAACCESSLib;
namespace ElipseNetCore{
class Program{
static void Main(string[] args){
try{
E3DataAccessManager e3DA = new E3DataAccessManager();
e3DA.Server = "localhost"; //kinda pointless but still
object Value = new object();
object Timestamp = new object();
object Quality = new object();
e3DA.ReadValue("A1.Value", ref Timestamp, ref Quality, ref Value); //ReadValue is a Elipse Server method that takes in a "tag" and place the result in the ref's
Console.WriteLine($"Value: {Value}, Timestamp: {Timestamp} and Quality: {Quality}");
}//end try
catch(Exception ex){
Console.WriteLine("the mother funking error now is :" +ex.ToString());
//regsvr32 C:\Users\lucas.battistella\Documents\Desenvolvimento\ElipseNetCore\ElipseNetCore\obj\Release\netcoreapp2.2\win-x64\ElipseNetCore.dll
}//end catch try
}//end Main
}//end Program
}//end namespace
Я получаю следующую ошибку:
System.Runtime.InteropServices.COMException (0x80040154): получение фабрики класса COMдля компонента с CLSID {80327130-FFDB-4506-B160-B9F8DB32DFB2} произошла ошибка из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Другие ответы указывают наx32 на x64 или наоборот. Однако я уже пытался убедиться, что все работает на x64. Тогда я попробовал все на x32 / x86. Также попытался вручную зарегистрировать .dll с помощью regsvr32 (как показано в закомментированной строке в первом блоке кода, а также E3DATAACESSLib.dll), получил всплывающее окно с сообщением об ошибке, в котором говорилось «указанный dll загружен, но точка входа DllRegisterServer не найдена. Проверьте, является ли упомянутый dll файлом DLL или OCX "
Я был запутан этой проблемой в течение нескольких дней, и, поскольку я новичок во всем этом, я даже не знаю, если якувыркаясь в правильном направлении. Я был бы очень признателен за любые объяснения и прошу прощения за мои опечатки.
Как получить данные с сервера Elipse? Я что-то пропустил?
ОБНОВЛЕНИЕ: Я попробовал точно такой же код в Visual Studio, работающем на .Net Framework 4.7.2, и это сработало. Также попытался (все еще в Visual Studio) на .NetCore и получил вышеупомянутую ошибку.