Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 1855 - ошибка в функции RegQueryValueExA   Make a simular bug
Summary: ошибка в функции RegQueryValueExA
Status: CLOSED INVALID
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: 1.0.9
Hardware: PC Linux
: P5 minor
Target Milestone: ---
Assignee: Виталий Перов
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 1217
  Show dependency treegraph
 
In work:
Reported: 2008-05-27 16:17 MSD by Виталий Перов
Modified: 2008-09-19 12:54 MSD (History)
2 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments
Тест для воспроизведения проблемы (1003 bytes, text/plain)
2010-11-18 03:58 MSK, Vitaly Lipatov
Details

Note You need to log in before you can comment on or make changes to this bug.
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
Переделал тест. Всё прекрасно работает. Баги нет