Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278

OpenHardwareMonitorLib dll с экспортом функций

16.03.2025, 19:50. Показов 3368. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
исходное. VS 2022 v17.4. WIN7. .NET 4.8 сборка - релиз х64
пустой код
C#
1
2
3
4
5
6
7
8
9
10
11
12
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace testCS
{
    public class testCS
    {
    }
}
создаю проект. добавляю ссылку на OpenHardwareMonitorLib.dll. добавляется без проблем. сборка без ошибок.
после установки пакета через nuget Install-Package UnmanagedExports -Version 1.2.7 сборка выдает ошибку:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Серьезность  Код  Описание    Проект    Файл    Строка    Состояние подавления
Ошибка        непредвиденная ошибка при выполнении задачи "DllExportAppDomainIsolatedTask".
System.ArgumentException: Запрошенное значение "Version48" не найдено.
 
Server stack trace: 
   в System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult)
   в System.Enum.Parse(Type enumType, String value, Boolean ignoreCase)
   в RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.<>c__DisplayClass8.<GetGetToolPathInternal>b__7(Version version, String toolName) в c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:строка 568
   в RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.TryToGetToolDirForFxVersion(String toolFileName, Func`3 getToolPath, String& toolDirectory) в c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:строка 725
   в RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.ValidateToolPath(String toolFileName, String currentValue, Func`3 getToolPath, String& foundPath) в c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:строка 698
   в RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.ValidateFrameworkPath() в c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:строка 680
   в RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.ValidateInputValues() в c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:строка 396
   в RGiesecke.DllExport.MSBuild.ExportTaskImplementation`1.Execute() в c:\Users\rober_000\Documents\Code\unmanaged-exports\RGiesecke.DllExport.MSBuild\ExportTaskImplementation.cs:строка 264
   в System.Runtime.Remoting.Messaging.StackBuilderSink._PrivateProcessMessage(IntPtr md, Object[] args, Object server, Object[]& outArgs)
   в System.Runtime.Remoting.Messaging.StackBuilderSink.SyncProcessMessage(IMessage msg)
 
Exception rethrown at [0]: 
   в System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg)
   в System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type)
   в Microsoft.Build.Framework.ITask.Execute()
   в Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()
   в Microsoft.Build.BackEnd.TaskBuilder.<ExecuteInstantiatedTask>d__26.MoveNext() testCS
Что я делаю не так и как это побороть?

PS общение со знайкой ЖПТ напоминает кандидатскую из 90-х - Бег свиней по кругу. Влияние на интеллект. С шарпом знания не очень.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.03.2025, 19:50
Ответы с готовыми решениями:

Экспорт функций из С# в другие языки программирования
Подскажите, каким образом необходимо создавать библиотеки функций на C#, что с этими библиотеками можно было работать в других языках...

Экспорт Си библиотеки и использование ее функции
Всем доброго времени суток. Использую стороннюю библиотеку написанную на Си. Написал обертку на C#. Вопрос, правильно ли я реализовал метод...

Экспорт функций dll
Привет не могу понять ка к экспортировать функции dll при помощи ExportDll какие параметры командной строки использовать кто...

25
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,160
Записей в блоге: 3
30.03.2025, 17:16
Студворк — интернет-сервис помощи студентам
stalkernet, Тут описал процесс добавления COM.

По мимо этого Вам надо отредактировать dll так что бы объект был виден из COM (По ссылке выше в примере это сделано).
PS. Не все может работать через COM, так как на нем тоже есть свои ограничения, но многое может.
0
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
31.03.2025, 13:53  [ТС]
Dinkin, Я уже настолько запутался что с трудом понимая что делаю.... (смайлик головой АП стену). если не сложно как из этой рекомендации
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
Sample code
 
public class UpdateVisitor : IVisitor
{
    public void VisitComputer(IComputer computer)
    {
        computer.Traverse(this);
    }
    public void VisitHardware(IHardware hardware)
    {
        hardware.Update();
        foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this);
    }
    public void VisitSensor(ISensor sensor) { }
    public void VisitParameter(IParameter parameter) { }
}
 
public void Monitor()
{
    Computer computer = new Computer
    {
        IsCpuEnabled = true,
        IsGpuEnabled = true,
        IsMemoryEnabled = true,
        IsMotherboardEnabled = true,
        IsControllerEnabled = true,
        IsNetworkEnabled = true,
        IsStorageEnabled = true
    };
 
    computer.Open();
    computer.Accept(new UpdateVisitor());
 
    foreach (IHardware hardware in computer.Hardware)
    {
        Console.WriteLine("Hardware: {0}", hardware.Name);
        
        foreach (IHardware subhardware in hardware.SubHardware)
        {
            Console.WriteLine("\tSubhardware: {0}", subhardware.Name);
            
            foreach (ISensor sensor in subhardware.Sensors)
            {
                Console.WriteLine("\t\tSensor: {0}, value: {1}", sensor.Name, sensor.Value);
            }
        }
 
        foreach (ISensor sensor in hardware.Sensors)
        {
            Console.WriteLine("\tSensor: {0}, value: {1}", sensor.Name, sensor.Value);
        }
    }
    
    computer.Close();
}
сделать dll с доступом к COM. если возможно.
Проект не комерческий (кафедра). раньше аналог делал - но дя видео (NVidia и еге достпу к датчикам через DLL, считали на видео. быстрее было). все жило пока не поменялось железо. теперь нагрузка возросла. нужны все датчичики. для вентеляции и распределения вычеслительной нагрузки. дабы не переголеро. Если раньше ТЗ согласовывали со мной. то сейчас прокладка - манагер...... Вобщем как то так.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,160
Записей в блоге: 3
31.03.2025, 17:12
stalkernet, Я как понял Вы в таком виде возможно не сможете запускать объект через COM, как минимум нужно вывести функционал работы с консолью из функционала туда, откуда будите обращаться.

Не по теме:


Ну и напомню что у COM есть свои требования, и отдельные требования для работы с потоками)

0
Эксперт .NET
 Аватар для Usaga
14347 / 9441 / 1358
Регистрация: 21.01.2016
Сообщений: 35,582
31.03.2025, 17:22
Я не пойму. Откуда в последнее время взялась эта мания - вызывать управляемый код напрямую из неуправляемого? Зачем? Чтобы жизнь себе усложнить максимально?
0
62 / 42 / 3
Регистрация: 04.01.2019
Сообщений: 278
31.03.2025, 23:01  [ТС]
причина - после "благотваИтельности" счетная стойка с 1.5 КВт резко уехала в 5.5КВт. возник вопрос эффективности вентиляции. Старая софтина писаная мной уже не видит новое железо. да и понадобились данные с проца винта и видео. появился AMD-у с радеоном.... свой speedfan уже делал(рабочий и на делфях). для интела. мозго-гинекология еще та. и ето под XP. под семерку ..................................... а тут все в C2H5OH....

По факту ТЗ - идЭотизм. тащить в счетную часть монитор.... хватилобы прицепить сетевую часть на шарпе для обмена и хватит. НО..... "ВицеГенетал" сказал.

Dinkin, как я понял мне нужно только

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class UpdateVisitor : IVisitor
{
    public void VisitComputer(IComputer computer)
    {
        computer.Traverse(this);
    }
    public void VisitHardware(IHardware hardware)
    {
        hardware.Update();
        foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this);
    }
    public void VisitSensor(ISensor sensor) { }
    public void VisitParameter(IParameter parameter) { }
}
 
public void Monitor()
{
    Computer computer = new Computer
    {
        IsCpuEnabled = true,
        IsGpuEnabled = true,
        IsMemoryEnabled = true,
        IsMotherboardEnabled = true,
        IsControllerEnabled = true,
        IsNetworkEnabled = true,
        IsStorageEnabled = true
    };
 
    computer.Open();
    computer.Accept(new UpdateVisitor());
но вот как его прикрутить к твоей части не понял.... буду благодарен за помощь.
0
 Аватар для Dinkin
783 / 556 / 136
Регистрация: 31.05.2013
Сообщений: 3,160
Записей в блоге: 3
01.04.2025, 10:33
Я не уверен, накидал в блокноте, чутка скорректировал то что у Вас...как то так
// namespace добавил сам, Вы его не показали, так что ....
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
namespace help_dll
{
    // Создаем ссылки на COM функции, что бы их было видно из вне
    [ComVisible(true)]
    [Guid("3EFA0BE2-B48C-47CF-82B0-99C5A8A8EA23")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)] // Это если класс будет запускаться в отдельном потоке, или если сингл, то поставте другое или уберите эту строку
    public interface IVisitor
    {
        void Monitor();
    }   
 
    [ComVisible(true)]
    [Guid("44A6B62E-F218-4775-B06F-2F28A48D4222")]
    [ClassInterface(ClassInterfaceType.None)]   
    public class UpdateVisitor : IVisitor
    {
        public void VisitComputer(IComputer computer)
        {
            computer.Traverse(this);
        }
        public void VisitHardware(IHardware hardware)
        {
            hardware.Update();
            foreach (IHardware subHardware in hardware.SubHardware) subHardware.Accept(this);
        }
        public void VisitSensor(ISensor sensor) { }
        public void VisitParameter(IParameter parameter) { }
    
        public static void Monitor()
        {
            Computer computer = new Computer
            {
                IsCpuEnabled = true,
                IsGpuEnabled = true,
                IsMemoryEnabled = true,
                IsMotherboardEnabled = true,
                IsControllerEnabled = true,
                IsNetworkEnabled = true,
                IsStorageEnabled = true
            };
         
            computer.Open();
            computer.Accept(new UpdateVisitor());
 
            // .....Тут явно что то еще
        }   
    }
}
Добавлено через 3 минуты
Цитата Сообщение от Usaga Посмотреть сообщение
Я не пойму. Откуда в последнее время взялась эта мания - вызывать управляемый код напрямую из неуправляемого? Зачем? Чтобы жизнь себе усложнить максимально?
У каждого свой фетиш....кто оливки, кто макароны с сахаром....а кто то...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2025, 10:33
Помогаю со студенческими работами здесь

вылетает полсе экспорта функции
public struct VS { public string m_n; }; public static extern int ShowSum(int a,int b); ...

Как экспортировать функции фреймфорка в DLL
Добрый день! Вот уже через неделю сдаю работу, хотелось бы чтобы клиент не &quot;таскал&quot; за собой &quot;гигантский&quot; фреймворк. ...

Создание dll с экспортной функцией для использования в с++
Доброго! Пробую создать dll, с экспортной функцией. dll буду прикреплять далее в с++ проект. Пробую делать по примеру, но тут явно...

проблема с экспортом из dll
Привет всем. Пишу библиотеку в ней 2 класса class __declspec(dllexport) C_RGBImage: public C_Matrix&lt;S_RGB&gt; { public: ...

Проблема с экспортом из DLL в C#
Добрый день . Нужна помощь профи , проблема в следующе у меня в DLL организовано подключение к Lua через static struct luaL_reg ls_lib , и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации: В классе Работник добавить: накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни коэффициентПрезентеизма — снижает продуктивность. . .
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день. Для работы необходим браузер,. . .
Модель здравосохранения 16. Слишком хорошие и здоровые сотрудники уходят, недовольные зарплатой
anaschu 23.05.2026
Отладка увольнений и настройка производительности Сегодня во второй половине дня разобрались с механикой увольнений и настроили коэффициент сложности заданий. Вот что было сделано. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru