Вопчем дело такое.
Программа при запуске считывает данные [параметры] из реестра, если её ключа нет
(конкретно HKCU\Software\firm_name\prog_name)
то прописывает его заново. Хендл потом закрываю. Затем при открытии нового файла она должна записывать его в качестве файла, открываемого по умолчанию. Вот тут начинается самое интересное(непонятное).
При попытке открыть этот ключ (см. выше) RegOpenKeyEx() ф-ция возвращает ошибку
(помоему об отсутствии ключа), хотя ключ в реестре есть( параллельно висит regedit). Код абсолютно такой же, как и в начале.
Builder C++ 5.0/Win2k Prof RU/Admin.
Перерыл кучу факов, форумов, но подобного глюка не нашел. Кода к сожалению привести не могу, забыл взять с собой (инет на работе).
Хееееееееелп!!!
[] AS>Перерыл кучу факов, форумов, но подобного глюка не нашел. Кода к сожалению привести не могу, забыл взять с собой (инет на работе). AS>Хееееееееелп!!!
А по вашему tyt телепаты собрались? Вы бы хоть сказали что RegOpenKeyEx возвращает. В обсчем код в студию, тогда будем посмотреть.
Здравствуйте ambient_sky, Вы писали:
AS>Вопчем дело такое. AS>Программа при запуске считывает данные [параметры] из реестра, если её ключа нет AS>(конкретно HKCU\Software\firm_name\prog_name) AS>то прописывает его заново. Хендл потом закрываю. Затем при открытии нового файла она должна записывать его в качестве файла, открываемого по умолчанию. Вот тут начинается самое интересное(непонятное). AS>При попытке открыть этот ключ (см. выше) RegOpenKeyEx() ф-ция возвращает ошибку AS>(помоему об отсутствии ключа), хотя ключ в реестре есть( параллельно висит regedit). Код абсолютно такой же, как и в начале. AS>Builder C++ 5.0/Win2k Prof RU/Admin. AS>Перерыл кучу факов, форумов, но подобного глюка не нашел. Кода к сожалению привести не могу, забыл взять с собой (инет на работе). AS>Хееееееееелп!!!
Вроде всё похоже на правду. Только один момент: ты получаешь избыточные права на ключи. Там где у тебя KEY_WRITE, тебе нужен KEY_SET_VALUE, там, где у тебя KEY_ALL_ACCESS, по-моему, тоже только он.
И всё-таки получи код ошибки, без него твое предположение, что это "ключа нет" несколько необоснованно...
Зачем здесь static? При следующем(не первом) входе в FormShow Sz уже не будет инициализироваться как 512, а будет оставаться тем, что в него записали при предыдущем входе — это так и надо???.
2.
if(RegOpenKeyEx(HKEY_CURRENT_USER,"Software\\Catzzz on air\\CDDatabase",0,KEY_ALL_ACCESS,&hKey) == ERROR_SUCCESS)
{
if(RegQueryValueEx(&hKey,"LastDbFile",NULL,&dwType,LastDbFile,&Sz) != ERROR_SUCCESS)
{
из MSDN
LONG RegQueryValueEx(
HKEY hKey, // handle to key
...
Надо бы убрать & перед hKey.
3.
Вместо KEY_ALL_ACCESS лучше использовать те флаги, что конкретно нужны — KEY_WRITE, KEY_READ — потому как не под админским экаунтом KAY_ALL_ACCESS может не сработать.
LONG RegSetValueEx(
HKEY hKey, // handle to key
LPCTSTR lpValueName, // value name
DWORD Reserved, // reserved
DWORD dwType, // value type
CONST BYTE *lpData, // value data
DWORD cbData // size of value data
);
cbData
[in] Specifies the size of the information pointed to by the lpData parameter, in bytes. If the data is of type REG_SZ, REG_EXPAND_SZ, or REG_MULTI_SZ, cbData must include the size of the terminating null character or characters.