非託管代碼與來自所述OpenHardwareMonitor項目,我已經自己做了一個漂亮的小工具來監視CPU和GPU指標溫度,負載一些啓示等調用從C#
它工作正常,但我到一個PInvokeStackImbalance
警告運行當調用NVidia驅動程序方法時,不要認爲忽略它們是明智的。然而,經過數週的實驗(使用NVidia Documentaion)後,我仍然無法弄清楚如何定義和使用驅動程序結構和方法,以使VS 2015滿意 - 這很奇怪,因爲有儘管使用完全相同的代碼,但在OpenHardwareMonitor項目中沒有警告。
希望這裏有人能指點我正確的方向。
[DllImport("nvapi.dll", CallingConvention = CallingConvention.Cdecl, PreserveSig = true)]
private static extern IntPtr nvapi_QueryInterface(uint id);
private delegate NvStatus NvAPI_EnumPhysicalGPUsDelegate([Out] NvPhysicalGpuHandle[] gpuHandles, out int gpuCount);
private static readonly NvAPI_EnumPhysicalGPUsDelegate NvAPI_EnumPhysicalGPUs;
NvAPI_EnumPhysicalGPUs = Marshal.GetDelegateForFunctionPointer(nvapi_QueryInterface(0xE5AC921F), typeof(NvAPI_EnumPhysicalGPUsDelegate)) as NvAPI_EnumPhysicalGPUsDelegate;
status = NvAPI_EnumPhysicalGPUs != null ? NvAPI_EnumPhysicalGPUs(PhysicalGPUHandles, out PhysicalGPUHandlesCount) : NvStatus.FUNCTION_NOT_FOUND; // warning is thrown here
賓果!我不知道你可以在代表中指定調用約定,我將它添加到所有代表中,不再有任何警告! – VikFreeze