2013-12-16 2 views
2

나는 레지스트리 키 값을 얻으려고하고 HKEY를 인쇄하거나 문자열로 변환하는 방법?

HKEY hkey; 

RegOpenKeyExA(HKEY_CURRENT_USER, "Software\\SomeSoft\\Settings", 0, 0x20019u, &hKey); 

printf("121 hkey= %s \n", hKey);  

컴파일되는 코드의 추출 다음 그것을

을 볼 수 있지만, 런타임에 멈췄다.

질문 : 문자열을 보려면 과 같이 보이는 hkey를 어떻게 변환해야합니까?

+0

"캐스팅"은 실제로이 질문에 대한 좋은 태그가 아닙니다. 나는 또한 당신이 언어를 지정하지 않았기 때문에 C++로 가정 할 것입니다. –

+0

주어진 'HKEY'값에 대한 문자열 표현을 얻고 싶다면 (예를 들어, 프로그램이'HKEY_CURRENT_USER \ Software \ SomeSoft \ Settings'와 같은 것을 인쇄하기를 원한다면) [이 질문을 참조하십시오] (http://stackoverflow.com/ 질문/937044/결정 - 경로에서 레지스트리 키까지 - hkey-handle-in-c) –

답변

0

HKEY은 문자열이 아니고 정수 값입니다. 그래서, 여러분의 프로그램이 hKey을 널 종료 배열 char으로 처리하고 아마도 런타임 오류를 일으키는 것으로 간주됩니다.

보유하고있는 데이터 유형에 적절한 형식 문자열을 사용해야합니다. 이것은 printf이라는 함정 중 하나이며 가능한 경우 C++ 스트림 출력 메커니즘을 선호해야하는 이유 중 하나입니다.

HKEY은 포인터 크기입니다. 따라서 코드가 32 비트와 64 비트 프로세스 모두에서 작동하도록하려면 형식 문자열에서 허용해야합니다. 가장 쉬운 방법은 포인터로 취급하고 %p을 사용하는 것입니다.

또한 오류 검사를 수행해야합니다. 당신은 RegOpenKeyEx의 반환 값을 무시하고 있으며 그렇게해서는 안됩니다. 함수에 의해 반환 된 값에주의를 기울임으로써 코드의 실제 문제가 드러난다면 놀랍지 않을 것입니다.

samDesired 매개 변수에는 마법 상수를 사용하지 마십시오. 비트 또는 연산자를 사용하여 플래그를 결합하여 지정하십시오. 또는 귀하의 경우에는 KEY_READ을 전달하십시오.

1

I에 의해 당신이 무슨 뜻인지 확실히 모르겠어요 "문자열에 HKEY 변환"

  1. 당신의 HKEY의 숫자 값을 얻을 당신이 포인터를 인쇄하는 것처럼 인쇄하려면 , 예.

    printf("hkey = %p\n", hkey); 
    
  2. 당신이 HKEY 핸들로 표시되는 경로를 인쇄 할 경우, this answer를 참조하십시오.

  3. HKEY이 참조하는 레지스트리 항목의 문자열 값을 인쇄하려면 RegQueryValueEx 함수를 사용하십시오.

0

반환 된 HKEY는 핸들입니다. 실제 레지스트리 값을 얻으려면 RegQueryValueEx을 사용하십시오.

관련 문제