4

可能な限り簡単な言葉で (私は最新の詳細なプログラミング知識が不足している時折のプログラマーです)、誰かが codegear C++ (2007) でレジストリを利用する最も簡単な方法を説明できます。

私が書いた古い (OLD!) プログラムにコード行があり、起動が大幅に遅れています...

DLB->Directory=pIniFile->ReadString("Options","Last Directory","no key!");

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

しかし、詳細は重要ではありません。codegear c++ ビルダーに固有のレジストリの使用に関する一般的なハウツーが欲しいだけです。

私はこれをグーグルで検索しましたが、このタイプのものではいつものように、C++ビルダーに関するページとWindowsレジストリに関するページがいくつかありますが、一方を他方と一緒に使用する方法を説明するページはありません.

4

4 に答える 4

10

TRegistryクラスを使用します...(registry.hppを含む)

//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ファイルを開いて読み取るのは非常に高速であるため、iniの読み取りが実際に問題であるという仮定をテストする必要があるかもしれません。代わりに、レジストリからディレクトリ名を取得するだけでは、問題を修正します。

于 2009-07-28T22:53:56.813 に答える
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 ... finally を覚えておくことは、実際には非常に役立ちます。

編集

.ini ファイルは Windows のレジストリに保存されると聞いたことがあります。そのため、ini ファイルの速度の利点が必要な場合は、.cfg のような別の名前を付ける必要があります。

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

于 2009-08-16T18:21:34.120 に答える
2

ティムは正しいですが、使用するさらに単純なクラスは TIniRegFile ですが、できることもより制限されています。

于 2009-08-09T10:34:08.203 に答える
1

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

于 2009-07-29T05:39:13.257 に答える