첨부해 주신 파일은 잘 됩니다.
어디가 잘못된건가요?
실행파일만 있어서....
빌더(TWx) 님이 쓰신 글 :
: 첫눈 님이 쓰신 글 :
: : 사용하고 있는 PC에는 그래픽카드가 2개입니다.
: : 하나는 내장그래픽으로 인텔이구요.
: : 나머지 하나는 nvidia GeForce GTX 560 SE입니다.
: :
: : 모니터는 당연히 560SE에 꼽혀있구요.
: :
: : OS는 Windows7 64Bit구요.
: :
: : 그래픽카드 온도를 측정하기 위해 다음과 같은 소스코드를 구글링하여 퍼왔습니다.
: :
: :
: : function NvidiaGpuTemp: Integer;
: : type
: : NvCplGetThermalSettings = function(
: : nWindowsMonitorNumber: UINT;
: : pdwCoreTemp,
: : pdwAmbientTemp, pdwUpperlimit: PDWORD): BOOL; cdecl;
: : var
: : hNvcpl: Hwnd;
: : GetThermalSettings: NvCplGetThermalSettings;
: : dwCoreTemp, dwAmbientTemp, dwUpperlimit: DWORD;
: : begin
: : Result := 0;
: :
: :
: : hNvcpl := LoadLibrary('nvcpl.dll');
: : if hNvcpl <> 0 then
: : try
: : GetThermalSettings := GetProcAddress(hNvcpl,'NvCplGetThermalSettings');
: : if Assigned(GetThermalSettings) then
: : If GetThermalSettings(0, Addr(dwCoreTemp), Addr(dwAmbientTemp),
: : Addr(dwUpperlimit)) then
: : begin
: : Result:= Integer(dwCoreTemp);
: : end;
: : finally
: : FreeLibrary(hNvcpl);
: : end;
: : end;
: :
: : procedure TForm1.Button1Click(Sender: TObject);
: : begin
: : ShowMessage(InttoStr(NvidiaGpuTemp));
: : end;
: :
: :
: : 그리고 nvcpl.dll은 그래픽카드 드라이버를 설치하면
: : C:\Windows\System32 폴더 안에 nvcpl.dll파일이 생성되어 그것을 사용하였습니다.
: :
: : 하지만 위 코드를 실행하면
: : hNvcpl := LoadLibrary('nvcpl.dll');
: : 이 부분에서 에러가 발생합니다.
: :
: : 그래서 네이버에서 검색하여 어느 블로그에 올려진 64비트용 nvcpl.dll을 구하여 사용해 봤습니다.
: : 이러자 이번엔
: : GetThermalSettings(0, Addr(dwCoreTemp), Addr(dwAmbientTemp), Addr(dwUpperlimit))
: : 여기서 False가 반환됩니다.
: :
: : GPU-Z.exe에서는 이상없이 그래픽카드 온도를 가져오는데
: : 제 코드는 뭐가 잘못된건가요?
: :
: : 뭐가 잘못된 건가요?
: :
: :
: :
: :
: : 참고로 NVidia에서 제공하고 메뉴얼에는 다음과 같이 나와 있습니다.
: :
: : 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->Settings 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.
: :
:
:
: 답변:
:
:
: NVIDIA 그래픽 카드가 없어서 직접 확인은 해 볼 수 없습니다만...
: 파일 첨부하니 확인해 보세요.
: