Как мне использовать реестр?
Проще говоря (я случайный программист, которому не хватает современных подробных знаний в области программирования), кто-то может объяснить самый простой способ использования реестра в codegear C++ (2007).
У меня есть строка кода в старой (старой!) Программе, которую я написал, что вызывает значительную задержку при запуске...
DLB-> Directory = pIniFile-> ReadString ("Параметры","Последний каталог","без ключа!");
Код использует INI-файл. Я хотел бы иметь возможность использовать реестр вместо (для записи переменных, таких как последний каталог, который использовалось приложением)
Но конкретика не важна. Я просто хотел бы получить общие инструкции по использованию реестра, специфичного для компоновщика codegear C++.
Я гуглил это, но, как обычно, с такими вещами я получаю много страниц о сборщике C++ и несколько страниц о реестре Windows, но нет страниц, которые объясняют, как использовать одно с другим.
4 ответа
Используйте класс 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-файла на самом деле ваша проблема, я не думаю, что просто взятие вашего имени каталога из реестра вместо этого будет исправить вашу проблему
Включите файл 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.
редактировать
Я слышал, что файлы.ini хранятся в реестре в Windows, поэтому, если вы хотите получить преимущество в скорости ini-файлов, вы должны называть их как-то иначе, например.cfg
Это то, что я слышал из хотя и надежного источника, я сам не проверял.
Тим прав, но еще более простой в использовании класс - TIniRegFile, но он также более ограничен в том, что вы можете сделать.
Пожалуйста, смотрите документацию по классу QSettings из библиотеки Qt 4.5. Это позволит вам легко и кроссплатформенно загружать и сохранять параметры конфигурации вашей программы. Реализация Windows использует реестр Windows для загрузки и хранения данных конфигурации вашей программы. На других платформах будет использоваться предпочитаемый платформой механизм хранения данных конфигурации. Это намного лучше, чем непосредственное взаимодействие с реестром Windows, поскольку вы не будете привязаны к конкретной платформе.