nVidia Temps auslesen
-
Nabend,
ich habe mein erstes Projekt noch nicht
fertig gestellt, möchte aber nun doch schon mit meinen 2ten anfangen,undzwar möchte ich mir gerne die Temperatur
meiner nVidia Karte ausgeben lassen, dazu hab ich
jetzt folgenden code zusammengeschnippselt.[DllImport("nvcpl.dll", EntryPoint="NvCplGetThermalSettings")] private static extern bool NvCplGetThermalSettings(uint nWindowsMonitorNumber, out UInt32 pdwCoreTemp, out UInt32 pdwAmbientTemp, out pdwUpperLimit); //Aufruf der temps public UInt32 GetNVidiaCardTemperature(int monitorNumber) { Uint32 coreTemp = 0; UInt32 ambientTemp = 0; UInt32 upperLimit = 0; if (NvCplGetThermalSettings(0, // Primärer Monitor out coreTemp, out ambientTemp, out upperLimit)) return coreTemp; else return 0; }
dort stimmt aber was net siehe hier : http://img5.imagebanana.com/view/9cs4ic2n/Unbenannt.jpg
zufinden ist alles auf seite 64 der API zur nvcpl.dll http://developer.download.nvidia.com/SDK/9.5/Samples/DEMOS/common/src/NvCpl/docs/NVControlPanel_API.pdf
-
Du kannst Importe nicht innerhalb einer Methode deklarieren, dass muss auf Klassenebene geschehen.
-
hab ich mir fast gedacht, wohin kommt denn unter c# die deklaration? nicht unter using oder?
-
Entweder so:
namespace ... { class ... { [DllImport(...)] private static extern void TestMethod(); } }
oder mit einer nested-class, was auch von Microsoft als "Best-Practice" vorgeschlagen wird, so:
namespace ... { class ... { private class NativeMethods { [DllImport(...)] public static extern void TestMethod(); } } }
-
vielen dank, da hab ich wieder was dazugelernt, klappt aber noch net ganz so richtig,
muss da nicht noch etwas für "using" rein?
-
Ich kann nur raten, was es sein könnte, wahrscheinlich kennt er
DllImport
nicht. Wenn du Visual Studio verwendest kannst du einfach mit der Maus auf DllImport klicken, mit dem Mauszeiger darüber fahren und unter dem 't' von "Import" sollte ein kleines rotes Kästchen erscheinen, wenn du dort wieder mit der Maus drüber fährst klappt ein kleines Menü auf und du kannst den fürDllImport
benötigten Namespace automatisch hinzufügen lassen.Wenn du kein Visual Studio benutzt geh einfach auf http://msdn.microsoft.com, geb dort als Suchbegriff "DllImport" ein und such dir den benötigten Namespace raus.
-
ja das hat soweit geklappt, mich macht das aber trozdem fertig denn wenn das eine Problem gelöst ist kommt ein neues, jetzt sagt der mir zu:
GetNVidiaCardTemperature
GetNVidiaCardTemperature:Instanzmember können nicht in einer statischen adresse deklariert werden. ich bin am ende
-
Poste doch bitte auch immer den Code bei dem der Fehler auftritt. Der Kristallkugelempfang hier im Forum ist sehr schlecht.
Kleiner Tipp am Rande: Makier einen Fehler und drück "F1" dann wirst du zu einer mehr oder weniger hilfreichen Seite zu diesem Fehler geleitet. Wenn du Glück hast steht dort sogar, wie es falsch ist und wie man es richtig macht.
-
das mit dem f1 kannte ich auch noch nicht, wie bestimt vieles anderes
toller tipp danke,
public UInt32 GetNVidiaCardTemperature(int monitorNumber)
GetNVidiaCardTemperature:Instanzmember können nicht in einer statischen adresse deklariert werden
-
So wie sich das anhört ist die Klasse in der
GetNVidiaCardTemperature
deklariert ist statisch. Entweder du machhstGetNVidiaCardTemperature
auch statisch oder du entfernst dasstatic
bei der Klasse.