"Anatoly Lyutin" <vostok(a)etersoft.ru> wrote:
static void output(const char *message) { - DWORD count; - WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), message, strlen(message), &count, NULL); + DWORD count = 0; + WCHAR *mesW = NULL; + char *mes = NULL; + int wlen = 0; + int len = 0;
There is no need to initialize variables to 0 since you are going to explicitly initialize them later anyway.
+ wlen = MultiByteToWideChar( CP_ACP, 0, message, -1, NULL, 0 ); + mesW = HeapAlloc( GetProcessHeap(), 0, wlen * sizeof(WCHAR) ); + mes = HeapAlloc( GetProcessHeap(), 0, wlen * sizeof(char) );
Allocating wlen chars for 'mes' won't work correctly on a multibyte locale.
+ MultiByteToWideChar( CP_ACP, 0, message, -1, mesW, wlen ); + len = WideCharToMultiByte( GetConsoleOutputCP(), 0, mesW, wlen, NULL, 0, NULL, NULL );
Just move the call to allocate 'len' bytes for 'mes' here.
+ WideCharToMultiByte( GetConsoleOutputCP(), 0, mesW, wlen, mes, len, NULL, NULL );
-- Dmitry.