функция RegQueryValueExA служит для чтения определённого занчения открытого ключа. Ошибка заключается в том, что если буфер, в который необходимо записать полученное значение объявлять, например, как char[MAX_PATH], то при завершении функция выдаёт количество записанных байт, при этом в буфер ничего не пишет. При этом, если в буфере уже было старое значение, то оно стирается. При динамическом выделении памяти под буфер (HeapAlloc) всё работает замечательно. Необходимо проверить всегда ли возникает такая ошибка, и написать тест.
Написанный тест с исходника лежит здесь /var/ftp/tmp/test_RegQueryValue Ошибку не показал.
Created attachment 726 [details] Тест для воспроизведения проблемы В таких случаях надо файлы прикладывать в багу, потому что в tmp он будет удалён вскоре.
Тест не комплилируется (использую i386-mingw32msvc-gcc main.c -o test.exe) main.c: In function `main': main.c:15: error: `new' undeclared (first use in this function) main.c:15: error: (Each undeclared identifier is reported only once main.c:15: error: for each function it appears in.) main.c:15: error: syntax error before "char" main.c:32: error: `delete' undeclared (first use in this function) main.c:32: error: syntax error before ']' token >char* pdbuffer= new char[MAX_SIZE]; Насколько я помню, new - это функция веделения в C++ Здесь надо использовать HeapAlloc. Aналогично с delete[]
в смысле вместо delete - HeapFree
Moжно, конечно, и компилировать C++ компиллятором, но пользоваться всё-же стоит winapi функциями
Переделал тест. Всё прекрасно работает. Баги нет