Как получить данные с сервера Elipse с помощью .Net Core? Я ограничен .NET Framework для использования DLL? - PullRequest
1 голос
/ 03 октября 2019

У меня есть сервер 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 и получил вышеупомянутую ошибку.

...