Здравствуйте, dina89, Вы писали:
D> case WM_COMMAND: D> switch (LOWORD(wp)) { D> case IDCANCEL: /* посылается при закрытии диалога по [Esc]*/ D> case ID_EXIT: /* команда меню "ВЫход" */ D> DestroyWindow(hw); D> break;
Диалоги закрываются по EndDialog().
D> case ID_OPEN: /* команда меню "Открыть" */ D> .... D> /* открываем файл */ D> hf=CreateFile(filename,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL);
Указываете FILE_FLAG_OVERLAPPED, но не указываете структуру. Тут могу ошибаться, асинхронный ни разу не использовал, правлю по памяти.
D> .... D> len=GetFileSize(hf,NULL); D> bufr=(PCTSTR*)malloc(len+1); /* доп. байт под символ-терминатор (0) */
Не нравится мне выделение памяти чем-то, хоть убейте. Вероятно тем, что выделяется память под набор строк, а не символов.
D> ReadFile(hf,LPWSTR(bufr),len,NULL,&olr);
Тут можно использовать одну структуру OVERLAPPED, которую вы указали при открытии файла.
D> hf=CreateFile(filename,GENERIC_WRITE,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
Аналогично похожей записи на открытие для чтения, "претензия" та же.
D> WriteFile(hf,bufw,sizeof(bufw)+1,NULL,&olw);
И вот тут расхождение: читаете вы unicode, а записываете в ansi. Для unicode-файлов требуется в начало записать два байта-сигнала: 0xFF и 0xFE.