4

用最简单的术语(我是一个偶尔的程序员,缺乏最新的详细编程知识)有人可以解释在 codegear C++(2007)中使用注册表的最简单方法。

我编写的旧(OLD!)程序中有一行代码导致启动显着延迟......

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

该代码正在使用 ini 文件。我希望能够改用注册表(写入变量,例如应用程序使用的最后一个目录)

但具体情况并不重要。我只是想要一个关于使用特定于 codegear c++ builder 的注册表的通用方法。

我已经用谷歌搜索了这个,但是像往常一样,我得到了很多关于 c++ builder 的页面和一些关于 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;
    }
}

应该自我解释,记住 try ... finally 在使用 VCL TRegistry 类时实际上真的很有帮助。

编辑

我听说 .ini 文件存储在 Windows 的注册表中,所以如果您想要 ini 文件的速度优势,您应该将它们命名为其他名称 - 例如 .cfg

这是我从一个可靠的来源听到的,我自己没有测试过。

于 2009-08-16T18:21:34.120 回答
2

Tim 是对的,但使用起来更简单的类是 TINiRegFile,但它的功能也更有限。

于 2009-08-09T10:34:08.203 回答
1

请参阅Qt 4.5 库中的QSettings类的文档。它将允许您以跨平台的方式轻松加载和存储程序的配置设置。Windows 实现使用 Windows 注册表来加载和存储程序的配置数据。在其他平台上,将使用该平台的首选本地机制来存储配置数据。这比直接与 Windows 注册表交互要好得多,因为您不会被绑定到特定平台。

于 2009-07-29T05:39:13.257 回答