Bug 1855

Summary: ошибка в функции RegQueryValueExA
Product: WINE@Etersoft Reporter: Виталий Перов <vitperov>
Component: ОбщееAssignee: Виталий Перов <vitperov>
Status: CLOSED INVALID QA Contact:
Severity: minor    
Priority: P5 CC: ivan, lav
Version: 1.0.9   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 1217    
Attachments: Тест для воспроизведения проблемы

Description Виталий Перов 2008-05-27 16:17:05 MSD
функция RegQueryValueExA служит для чтения определённого занчения открытого ключа.

Ошибка заключается в том, что если буфер, в который необходимо записать полученное значение объявлять, например, как char[MAX_PATH], то при завершении функция выдаёт количество записанных байт, при этом в буфер ничего не пишет.
При этом, если в буфере уже было старое значение, то оно стирается.

При динамическом выделении памяти под буфер (HeapAlloc) всё работает замечательно.

Необходимо проверить всегда ли возникает такая ошибка, и написать тест.
Comment 1 Синицын Иван 2008-09-15 17:17:21 MSD
Написанный тест с исходника лежит здесь
/var/ftp/tmp/test_RegQueryValue
Ошибку не показал.
Comment 2 Vitaly Lipatov 2008-09-15 19:15:11 MSD
Created attachment 726 [details]
Тест для воспроизведения проблемы

В таких случаях надо файлы прикладывать в багу, потому что в tmp он будет удалён вскоре.
Comment 3 Виталий Перов 2008-09-16 21:07:29 MSD
Тест не комплилируется  (использую 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[] 
Comment 4 Виталий Перов 2008-09-16 21:08:45 MSD
в смысле вместо delete - HeapFree
Comment 5 Виталий Перов 2008-09-16 21:33:38 MSD
Moжно, конечно, и компилировать C++ компиллятором, но пользоваться всё-же стоит winapi функциями
Comment 6 Виталий Перов 2008-09-19 12:53:32 MSD
Переделал тест. Всё прекрасно работает. Баги нет