0

我发现很少有关于如何让 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();”行上崩溃了 我在上面发布的那个错误。

请帮忙!

4

1 回答 1

1

显然是我的设置有问题。它不会在其他系统上失败......当这种情况发生时,你不要讨厌它。

于 2012-07-23T21:00:12.050 回答