Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Nvidia Grafikkartentemperatur auslesen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
22.03.2006, 14:10 Uhr
~Tibby
Gast


Hi,

ich bin ein absoluter C++ Anfänger und versuche gerade den Einstieg zu finden. Ich finde gerade den Wald vor lauter Bäumen nicht und bräuchte nur einen kleinen Tipp wo ich meinen Fehler in etwa suchen muß.

Ich möchte die Temperaturen meiner Grafikkarte auslesen. Nvidia stellt da ganz guten Beispiel Code (NVIDIA Control Panel API) zur Verfügung, nur wenn ich das laut Dokumentation Versuche umzusetzen, wirft mir der Linker eine Fehlermeldung, die ich nicht nachvollziehen kann.


Zitat von Referenz:

NvCplGetThermalSettings()

Function Prototype:
BOOL CDECL NvCplGetThermalSettings (IN UINT nWindowsMonitorNumber, OUT DWORD* pdwCoreTemp, OUT DWORD* pdwAmbientTemp, OUT DWORD* pdwUpperLimit);

Parameters In:
UINT nWindowsMonitorNumber -- The display number shown on the Windows Display Properties
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.



Nachdem ich mir nun Anfängerwissen zum Thema Pointern zusammengelesen habe, und einfachere Beispiele sogar funktionieren, habe ich mir laut obiger Referenz das hierzusammengecoded:

C++:
#include <stdio.h>
#include <conio.h>
#include "NvCpl.h"

...

DWORD pdwCoreTemp;
DWORD pdwAmbientTemp;
DWORD pdwUpperLimit;
if (NvCplGetThermalSettings(0, &pdwCoreTemp, &pdwAmbientTemp, &pdwUpperLimit) == FALSE) {
  printf("Unable to retrieve GPU Temperature");
}
else {
  printf("GPU Temperatur: %d C", pdwCoreTemp);
}




Und bekomme nun folgende Fehlermeldung:

Zitat:

1>Linking...
1>NvCpl.obj : error LNK2019: unresolved external symbol _NvCplGetThermalSettings referenced in function "void __cdecl GPUConfiguration(struct HINSTANCE__ *)" (?GPUConfiguration@@YAXPAUHINSTANCE__@@@Z)
1>../../bin/release/NvCpl.exe : fatal error LNK1120: 1 unresolved externals



...aber das "external symbol _NvCplGetThermalSettings" ist definiert. Könnte mir jemand kurz auf die Sprünge helfen? ...oder habe ich doch noch ein Verständnisproblem mit Pointern?

Viele Grüße aus dem Ruhrpott,
Tibby
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.03.2006, 15:31 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi,
hast vergessen die api-library dazuzulinken.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
22.03.2006, 17:50 Uhr
xXx
Devil


joa... oder du machst es noch anders... da musst de halt dann bloß die dll rausfinden in der das steht Also einfach mal Dependency walker laufen lassen

also wie folgt:

C++:
#include <stdio.h>
#include <conio.h>
#include <windows.h>

// Das musst de Global machen... also ist am besten ;)
typedef BOOL (__stdcall*nvcplgetthermalsettings)(unsigned int, DWORD*, DWORD*, DWORD*);
nvcplgetthermalsettings NvCplGetThermalSettings = NULL;

// Das folgende muss de dann auf jedenfall vor dem aufruf von NvCplGetThermalSettings haben... also kann bsw. in der WinMain sein.
::HINSTANCE__* hDll = ::LoadLibrary ("dieentsprechende.dll");

if (hDll == NULL)
    return -1;

NvCplGetThermalSettings= reinterpret_cast<nvcplgetthermalsettings>(::GetProcAddress (hDll, "NvCplGetThermalSettings"));

if (NvCplGetThermalSettings == NULL)
{
    ::FreeLibrary (hDll);
    return -1;
}

// So jetzt einfach wieder dein Aufruf...
DWORD pdwCoreTemp;
DWORD pdwAmbientTemp;
DWORD pdwUpperLimit;
if(NvCplGetThermalSettings(0, &pdwCoreTemp, &pdwAmbientTemp, &pdwUpperLimit) == 0)
{
    printf("Unable to retrieve GPU Temperature");
}
else
{
    printf("GPU Temperatur: %d C", pdwCoreTemp);
}


So das ganze hat den Vorteil das deine Exe schön klein bliebt und wenn die Dll net auf dem System existiert, du dir ne Anständige Warnmeldung ausgeben lassen kannst Musst halt nur den Dll Namen bei: dieentsprechende.dll angeben
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: