我发现很少有关于如何让 OHM 在 c# 中工作的例子
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenHardwareMonitor.Hardware;
namespace OpenHardwareMonitorReport
{
class Program
{
static void Main(string[] args)
{
Computer computer = new Computer();
computer.Open();
var temps = new List<decimal>();
foreach (var hardware in computer.Hardware)
{
if (hardware.HardwareType != HardwareType.CPU)
continue;
hardware.Update();
foreach (var sensor in hardware.Sensors)
{
if (sensor.SensorType != SensorType.Temperature)
{
if (sensor.Value != null)
temps.Add((decimal)sensor.Value);
}
}
}
foreach (decimal temp in temps)
{
Console.WriteLine(temp);
}
Console.ReadLine();
}
}
}
这应该显示一些传感器数据,但是当我运行它时,它会给我这个错误:
托管调试助手“PInvokeStackImbalance”在“C:\Users\Josh\Desktop\DLLTutorial\HardwareMonitor\HardwareMonitor\bin\Debug\HardwareMonitor.vshost.exe”中检测到问题。附加信息:对 PInvoke 函数 'PInvokeDelegateFactoryInternalAssembly!PInvokeDelegateFactoryInternalWrapperType13::ADL_Main_Control_Create' 的调用使堆栈失衡。这可能是因为托管 PInvoke 签名与非托管目标签名不匹配。检查 PInvoke 签名的调用约定和参数是否与目标非托管签名匹配。
我已经从 OHM svn 下载了 .dll,将其放入我的项目中,添加了对它的引用,它在“computer.Open();”行上崩溃了 我在上面发布的那个错误。
请帮忙!