Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[15911] 그래픽카드 온도를 구하는 소스코드인데 에러가 납니다.
첫눈 [hadugo] 198 읽음    2017-07-27 10:20
사용하고 있는 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.

+ -

관련 글 리스트
15911 그래픽카드 온도를 구하는 소스코드인데 에러가 납니다. 첫눈 198 2017-07-27
15912     Re:그래픽카드 온도를 구하는 소스코드인데 에러가 납니다. 빌더(TWx) 249 2017-07-28
15913         Re:Re:잘되네요. 뭐가 잘못된건가요? 첫눈 211 2017-07-28
15914             Re:Re:Re:잘되네요. 뭐가 잘못된건가요? 빌더(TWx) 264 2017-07-28
15915                 Re:Re:Re:Re:감사합니다. 첫눈 225 2017-07-28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.