Hallo. Bin gerade über die Dokumentation der NVCPL Type Library von NVIDIA gestolpert. (Quelle: http://download.developer.nvidia.com/developer/SDK/Individual_Samples/DEMOS/common/src/NvCpl/docs/NVControlPanel_API.pdf )
Hier wird neben anderen DLL exports auch die Funktion beschrieben, um die Temperaturen (Core und Umgebung) vom Treiber abzufragen.
NvCplGetThermalSettings()
Function BOOL CDECL _
NvCplGetThermalSettings
Prototype (IN UINT _
nWindowsMonitorNumber,
OUT DWORD* _
pdwCoreTemp,</_
b>
OUT DWORD* _
pdwAmbientTemp_
,
OUT DWORD* _
pdwUpperLimit)_
;
Parameters In UINT nWindowsMonitorNumber
-- The display number _
shown on the Windows
Display _
Properties->Set_
tings page.
A value of 0 indicates the current primary Windows display _
device.
DWORD* must be a valid pointer --
pdwCoreTemp -- GPU temperature in degrees Celsius.
pdwAmbientTemp -- Ambient temperature in degrees Celsius.
pdwUpperLimit -- Upper limit of the GPU temperature specification.
Return Values True on success.
False on failure. Habe das VB Äquivalent folgendermassen geschrieben:
Private Declare Function NvCplGetThermalSettings Lib "nvcpl.dll" _
(ByVal nWindowsMonitorNumber As Integer, ByRef pdwCoreTemp As Long, _
ByRef pdwAmbientTemp As Long, ByRef PdwUpperLimit As Long) As Boolean Ist das so korrekt?
Denn: Wenn ich dann mit diesem Code
Public Sub Main()
On Local Error GoTo errhandler
Dim Core As Long
Dim Ambient As Long
Dim Limit As Long
Dim gres As Boolean
gres = NvCplGetThermalSettings(0, Core, Ambient, Limit)
If gres Then
MsgBox "Query succeeded." & vbCrLf & "GPU core temperature is: " _
& Core & vbCrLf & "Card ambient temperature is: " & Ambient & vbCrLf _
& "Upper limit is set to: " & Limit, vbInformation, "Forceware Query"
Else
MsgBox "NvCpl query failed!", vbInformation, "Foreware query"
End If
End
errhandler:
MsgBox Err.Number & ": " & Err.Description, vbCritical, Err.Source
End
End Sub die Temperaturen abfragen will, bekomme ich einen Runtime-Error 49
(Bad DLL calling convention) in der IDE - in kompilierter Form funktioniert es jedoch problemlos.
Wie kann das sein? Sollte ich wirklich eine falsche Anzahl an Argumenten oder falsche Datentypen an die DLL übergeben, dann dürfte das Ganze in kompilierter Form auch nicht funktionieren.  |