如何使用Libre Hardware Monitor库读取GPU传感器

问题描述 投票:0回答:1

我正在使用Libre Hardware Monitor库编写一个简单的C#应用​​程序。一切正常,除了gpu传感器。如果我将GPUEnabled设置为“true”,我收到以下消息:

Managed Debugging Assistant 'PInvokeStackImbalance' : 
'A call to PInvoke function'OpenHardwareMonitorLib!OpenHardwareMonitor.Hardware.
Nvidia.NVAPI+NvAPI_GetInterfaceVersionStringDelegate::Invoke' has unbalanced the stack. 
This is likely because the managed PInvoke signature does not match the unmanaged target
signature. Check that the calling convention and parameters of 
the PInvoke signature match the target unmanaged signature.'

在NVAPI.cs 335.行中

public static NvStatus NvAPI_GetInterfaceVersionString(out string version) {
      StringBuilder builder = new StringBuilder(SHORT_STRING_MAX);
      NvStatus status;
      if (_NvAPI_GetInterfaceVersionString != null)
/*335*/ status = _NvAPI_GetInterfaceVersionString(builder);
      else
        status = NvStatus.FUNCTION_NOT_FOUND;
      version = builder.ToString();
      return status;
    }

随着Libre Hardware Monitor一切正常。 GPU:华硕-ROG-STRIX-RTX2080-O8G-GAMING 我的代码(主要来自here):

Computer thisPC;

public EMSSettings()
{
    InitializeComponent();

    thisPC = new Computer()
    {
        GPUEnabled = true
    };

    thisPC.Open();
}

private void timer1_Tick(object sender, EventArgs e)
{

    String temp = "";

    foreach (var hardwareItem in thisPC.Hardware)
    {
        if (hardwareItem.HardwareType == HardwareType.CPU || true)
        {
            hardwareItem.Update();
            foreach (IHardware subHardware in hardwareItem.SubHardware)
                subHardware.Update();

            foreach (var sensor in hardwareItem.Sensors)
            {
                if (sensor.SensorType == SensorType.Temperature || true)
                {

                    temp += String.Format("{0} Temperature = {1}\r\n", sensor.Name, sensor.Value.HasValue ? sensor.Value.Value.ToString() : "no value");

                }
            }
        }
    }

    textBox1.Text = temp;

}

感谢所有的答案

c# sensor nvapi openhardwaremonitor
1个回答
0
投票

答案在这里:https://stackoverflow.com/a/39203588/9355850 在每位代表面前添加[UnmanagedFunctionPointer(CallingConvention.Cdecl)]

© www.soinside.com 2019 - 2024. All rights reserved.