#define _UNICODE не работает с MinGW + CodeBlocks - PullRequest
4 голосов
/ 11 января 2011

обычно я использую visual studio, но я перешел на mingw, мне нравится, чтобы мои приложения можно было легко менять с юникодовой и многобайтовой, в моем проекте mingw у меня есть свои определения, и они включают в себя:

#define WIN32_LEAN_AND_MEAN
#define WINVER 0x0700
#define _UNICODE

#include <windows.h>
#include <commctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <tchar.h>

#define WND_MAIN_CLASS  _T("MainWindowFrame")

тогда я регистрируюсь и создаю свое окно, например

 WNDCLASSEX wc;
...
wc.lpszClassName = WND_MAIN_CLASS;

RegisterClassEx(&wc);

    hwnd = CreateWindowEx(0, WND_MAIN_CLASS, _T("Main Window"),
  WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN,
  CW_USEDEFAULT, CW_USEDEFAULT, 640, 480, NULL, NULL, hInst, NULL);

но когда я иду к компиляции, я получаю ошибки, что он не может преобразовать wchar_t в CHAR * в lnzzlassCameName WNDCLASSEX и CreateWindowEx в имени класса и заголовке окна.

Если я щелкну правой кнопкой мыши и перейду к объявлению createwindowex и WNDCLASSEX, он получит их из winuser.h:

    typedef WNDCLASSEXW WNDCLASSEX,*LPWNDCLASSEX,*PWNDCLASSEX;

#define CreateWindowEx CreateWindowExW

если я закомментирую определение _UNICODE, оно компилируется и работает без проблем

1 Ответ

9 голосов
/ 11 января 2011

При компиляции Unicode-приложений вы, вероятно, должны определить и UNICODE, и _UNICODE. Заголовки Windows используют UNICODE , а среда выполнения MS C использует _UNICODE

...