Хорошая ошибка.
Первый вариант : заточить код под Unicode, я этого не умею - все упирается в константные указатели (я еще не совсем понимаю, как с ними работать, как "поместить" строку с неизвестной длиной в константный указатель на строку), в моем проекте указатели неконстантные.
Второй вариант: Project - Properties - General - Character Set - поставить Not set
Третий вариант: вместо CreateFile, MessageBox, CharToOem явно указать CreateFileA, MessageBoxA, CharToOemA
find это моя пользовательская функция. Про strng, пользовательский тип данных я все объяснил выше.
По поводу hFile=CreateFile сюда
http://msdn.microsoft.com/en-us/library/aa363858.aspx
Описание функции:
BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped
);
ReadFile возвращается значение типа BOOL
Значение, возвращенное функцией было помещено в переменную bResult. Мы не знаем, что туда было помещено. Чтобы предпринять какие-то действия в зависимости от того, что в этой епременной, мы используем условный оператор if
Синтаксис условного оператора
IF ( ПРОВЕРОЧНОЕ_ВЫРАЖЕНИЕ)
ДЕЙСТВИЕ
Проверочное выражение/ условное выражение - выражение которое при выполнении оказывается либо 1, либо 0.
Действие выполняется, если в проверочном выражении оказывается 1
IF ( ПРОВЕРОЧНОЕ_ВЫРАЖЕНИЕ)
ДЕЙСТВИЕ 1
ELSE
ДЕЙСТВИЕ 2
Действие 1 выполняется, если в условном выражении оказывается 1
Действие 2 выполняется, если в условном выражении оказывается 0
В условном выражении может понадобится проверить несколько операторов.
Булева алгебра:
ЛОГИЧЕСКОЕ И "возвращает" 1, если все выражение входящие в И истинны, и 0 в противном случае
ЛОГИЧЕСКОЕ ИЛИ "возвращает" 1, если хотя бы одно из выражений входящих в ИЛИ истинно, и 0, если все выражения ложны
ЛОГИЧЕСКОЕ НЕТ "возвращает" 1, если в выражении 0. Возвращает 0, если в выражении 1.
ЛОГИЧЕСКОЕ И в языке С обозначается &&
ЛОГИЧЕСКОЕ ИЛИ в языке С обозначается ||
ЛОГИЧЕСКОЕ НЕТ в языке С обозначается !
Код:

if(!bResult) {
Msg("Невозможно прочитать файл!"); //Если в bResult оказалась 1
}
else
{
find(t, (int)fzi, 10,3); //Если в bResult оказалась 0
}
bResult может принять значение либо не 0, либо 0
Если в bResult оказался 0, то это означает что прочитать из файла не удалось
Если в bResult оказался не 0, то это означает что прочитать из файла удалось
(См что может вернуть функция Read File
Код:

Nonzero indicates success. Zero indicates failure.
ЛОГИЧЕСКОЕ НЕТ (!bResult) меняет значение bResult на противоположное: 1 на 0, 0 на 1.
Таким образом если в bResult оказался 0, то !bResult означает 1
Таким образом если в bResult оказался не 0, то !bResult означает 0
Если !bResult != 0, то выполняется Msg("Невозможно прочитать файл!");
Если !bResult == 0, то выполняется find(t, (int)fzi, 10,3);
По другому условное выражение можно переписать так
Цитата:
if (bResult !=0)
{
find(t, (int)fzi, 10,3);
}
else
{
Msg("Невозможно прочитать файл!");
}
|