2009-07-28 1 views
4

最も簡単な言い方をすると(私は、時には詳細なプログラミング知識が不足しているプログラマーです)、C++(2007)のコードギアでレジストリを使用する最も簡単な方法を説明できます。どのようにレジストリを使用しますか?

I ...起動時の大幅な遅延を引き起こしている私が書いた古い(OLD!)プログラムのコードの行を持って

DLB->ディレクトリ= pIniFile-> ReadString( "オプション"、」最後のディレクトリ "、"キーなし! ");

コードではiniファイルを使用しています。代わりにレジストリを使用できるようにしたいと思います(アプリケーションが最後に使用したディレクトリなどの変数を書き込むため)。

しかし、詳細は重要ではありません。私は、コードギアC++ビルダーに特有のレジストリを使用することについての一般的な使い方が好きです。

私はこのタイプのものでいつものように、WindowsレジストリについてのC++ビルダーといくつかのページについて多くのページを取得しますが、他のものを使用する方法を説明するページはありません。

答えて

10

ので、多分あなたが読書というあなたの仮定をテストする必要があり、

//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を含める)... TRegistryオブジェクトクラスを使用しますiniは実際にあなたの問題です、私はちょうどレジストリからあなたのディレクトリ名をつかむことはあなたの問題を解決するつもりだとは思わない。

+0

「theKey」については、エスケープされたバックスラッシュを使用してください。例えば'Software \\ some \\ path \\ to \\ key' –

1

クラスのドキュメントは、Qt 4.5 libraryからご覧ください。これにより、プログラムの構成設定を容易にプラットフォーム間でロードして格納することができます。 Windows実装では、Windowsレジストリを使用して、プログラムの構成データを読み込んで格納します。他のプラットフォームでは、構成データを格納するためのプラットフォームのネイティブなメカニズムが使用されます。これは、特定のプラットフォームに縛られないため、Windowsレジストリと直接対話するよりもはるかに優れています。

2

ティムは正しいですが、さらに簡単なクラスはTIniRegFileですが、あなたのできることにはさらに制限があります。

3

はRegistry.hppファイルを含める:

#include <Registry.hpp> 

次にあなたが持っている任意の関数では、あなたが値を読み取るために次のように記述することができます

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; 
} 

ので、値を読むことのように簡単にする必要がありますよう:

ShowMessage(ReadRegistryString("Options", "Last Directory", "none")); 

あなたは値を書き込むために使用することができます以下

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ファイルがWindowsのレジストリに格納されていることを聞いたので、あなたは、iniファイルの速度の利点をしたい場合は、何か他のものにそれらを呼び出す必要がある - などがあります。cfg

これは信頼できる情報源から聞いたことですが、私はそれを自分でテストしていません。

関連する問題