用最简单的术语(我是一个缺乏最新详细编程知识的偶然程序员),有人可以解释在codegear C ++(2007)中使用注册表的最简单方法。
我在一个旧的(OLD!)程序中有一行代码,这个程序导致启动时间显着延迟......
DLB->目录= pIniFile-> ReadString(“选项”,“上一个目录”,“无密钥!”);
代码正在使用ini文件。我希望能够使用注册表(编写变量,例如应用程序使用的最后一个目录)
但具体细节并不重要。我只是喜欢使用特定于codegear c ++ builder的注册表的通用方法。
我用谷歌搜索了这个,但是和往常一样,我得到了很多关于c ++ builder的页面和一些关于windows注册表的页面,但没有解释如何使用另一个页面的页面。
答案 0 :(得分: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实际上是你的问题,我不认为只是从注册表中获取目录名称而不是将解决你的问题。
答案 1 :(得分: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 ...终于在使用VCL TRegistry类时确实非常有用。
修改强>
我听说.ini文件存储在Windows的注册表中,所以如果你想要ini文件的速度优势,你应该把它们叫做别的东西 - 比如.cfg
这是我从一个可靠的来源听到的,我没有亲自测试过。
答案 2 :(得分:2)
答案 3 :(得分:1)
请参阅QSettings中Qt 4.5 library课程的文档。它允许您以跨平台的方式轻松加载和存储程序的配置设置。 Windows实现使用Windows注册表来加载和存储程序的配置数据。在其他平台上,将使用平台首选的本机存储配置数据机制。这比直接与Windows注册表交互要好得多,因为您不会绑定到特定平台。