Форум — Ответы     (  К темам )
 ?  Dr.Phoenix: Почему не работает FindFirstFile? (28-03-2003 23:17:14)
Почему не работает FindFirstFile?
Я делаю так:

AnsiString Convertor=Path->Text+"*";
LPWIN32_FIND_DATA FileInfo;
HANDLE Search = FindFirstFile(Convertor.c_str(),FileInfo);
Label1->Caption = FileInfo->cFileName;

А в результате вызывается исключение и прога вылетает... Почему так и что неправильно?
 Георгий (29-03-2003 00:14:38)
Извини за грубость, но ошибка в данном случае в ДНК...

LPWIN32_FIND_DATA по венгерской нотации это означает указатель на структуру WIN32_FIND_DATA. У тебя этот указатель остаётся не проинициализированным (в нём находится мусор), затем это нечто передаётся в функцию, которая думает, что работает с адресом обьекта — в результате в почти случайную ячейку памяти записывается результат работы этой функции, что и приводит к различным "спец. эффектам" (конечно слабее, чем от ошибок со стеком, но всё равно не приятно).

напиши так:

AnsiString Convertor="c:\\*";
WIN32_FIND_DATA structFileInfo; //добавленная строка
LPWIN32_FIND_DATA FileInfo=&structFileInfo; //изменённая строка
HANDLE Search = FindFirstFile(Convertor.c_str(),FileInfo);
Label1->Caption = FileInfo->cFileName;

Чтож ты так не внимательно читал описание функции — "времени не было" (с)?

если ещё пару вопросов с аналогичным диагнозом увижу, то уйду в запой...
на неделю...
а может и на две...
 Павел (29-03-2003 01:36:43)
Или, почти тоже самое:

AnsiString Convertor="c:\\*";
WIN32_FIND_DATA FileInfo;
HANDLE Search = FindFirstFile(Convertor.c_str(), &FileInfo);
Label1->Caption = FileInfo.cFileName;