2009-07-28 5 views
4

가장 단순한 가능한 용어로 (나는 최신 프로그래밍 지식이 부족한 가끔 프로그래머이다.) 누군가가 C++ (2007)의 codegear에서 레지스트리를 사용하는 가장 간단한 방법을 설명 할 수있다.어떻게 레지스트리를 사용합니까?

나는

DLB-> 디렉토리 = pIniFile-> ReadString ("옵션", "시작에 상당한 지연을 일으키는 내가 쓴 오래된 (OLD!) 프로그램 코드의 라인을 가지고 ... 마지막 디렉토리 ","키 없음! ");

코드는 ini 파일을 사용하고 있습니다. 대신 레지스트리를 사용할 수 있기를 원합니다 (응용 프로그램이 마지막으로 사용한 디렉토리와 같은 변수를 작성하는 데 사용).

그러나 세부 사항은 중요하지 않습니다. 나는 codegear C++ 빌더에만 해당하는 레지스트리를 사용하는 일반적인 방법을 원합니다.

나는 이것을 봤지만, 평소와 같이 C++ 빌더에 대한 많은 페이지와 Windows 레지스트리에 관한 몇 페이지를 얻었지만, 다른 것들과 함께 사용하는 방법을 설명하는 페이지는 없다.

답변

10

는 TRegistry 클래스를 사용하여 ...

//Untested, but something like... 
TRegistry *reg = new TRegistry; 
reg->RootKey = HKEY_CURRENT_USER; // Or whatever root you want to use 
reg->OpenKey("theKey",true); 
reg->ReadString("theParam",defaultValue); 
reg->CloseKey(); 

참고 열고, 어쩌면 당신은 당신의 가정을 테스트하는 것이 꽤 빨리 필요로하는 INI 파일을 읽는 (는 registry.hpp를 포함한다) 그의 읽기 ini는 실제로 당신의 문제입니다, 나는 그저 레지스트리에서 디렉토리 이름을 잡아내는 대신 문제를 해결할 것이라고 생각하지 않습니다.

+0

"theKey"의 경우 보조 문자로 이스케이프 처리 된 백 슬래시를 사용해야합니다. 예 : '소프트웨어 \\ some \\ path \\ to \\ key' –

1

클래스에 대한 설명서는 Qt 4.5 library에서 확인하십시오. 이를 통해 프로그램의 구성 설정을 쉽게 플랫폼 간 방식으로로드하고 저장할 수 있습니다. Windows 구현은 프로그램의 구성 데이터를로드하고 저장하기 위해 Windows 레지스트리를 사용합니다. 다른 플랫폼에서는 구성 데이터를 저장하기위한 기본 메커니즘이 사용됩니다. 이것은 특정 플랫폼에 묶이지 않기 때문에 Windows 레지스트리와 직접 상호 작용하는 것보다 훨씬 낫습니다.

2

팀이 맞지만 더 간단한 클래스를 사용하는 것은 TIniRegFile이지만 할 수있는 일이 더 제한됩니다.

String __fastcall ReadRegistryString(const String &key, const String &name, 
    const String &def) 
{ 
    TRegistry *reg = new TRegistry(); 
    String result; 

    try { 
     reg->RootKey = HKEY_CURRENT_USER; 

     if (reg->OpenKeyReadOnly(key)) { 
      result = reg->ReadString(name, def); 
      reg->CloseKey(); 
     } 
    } 
    __finally { 
     delete reg; 
    } 

    return result; 
} 

그래서 값을 읽는 것은 쉽게해야한다 :

#include <Registry.hpp> 

그런 다음 당신이 가지고있는 기능에, 당신은 값을 읽을 다음 작성할 수 있습니다

3

는 Registry.hpp 파일을 포함 예 :

01 다음과 같이 값을 쓸 수 있습니다.
void __fastcall WriteRegistryString(const String &key, const String &name, 
    const String &value) 
{ 
    TRegistry *reg = new TRegistry(); 

    try { 
     reg->RootKey = HKEY_CURRENT_USER; 

     if (reg->OpenKey(key, true)) { 
      reg->WriteString(name, value); 
      reg->CloseKey(); 
     } 
    } 
    __finally { 
     delete reg; 
    } 
} 

VCL TRegistry 클래스를 사용할 때 실제로 try ...를 기억하는 것이 실제로 도움이됩니다. 같은 -

편집

난 당신이 INI 파일의 속도를 이용하려는 경우 다른 뭔가를 호출해야하므로 .INI 파일, Windows에서 레지스트리에 저장되어 있다고 들었습니다.cfg

신뢰할 수있는 출처에서 들었지만 직접 테스트하지 않았습니다.

관련 문제