一、 之Unicode
昨天在用CodeBlocks以及MinGW系列编译器在编译一个wx项目时,编译器报出了“不能将const char * 转化为 const wchar_z *”这样的错误。这个错误我很熟悉,这是因为一个Unicode版的API函数(一般以W结尾,如CreateFileW),传入了一个char *类型的字符指针。但出错的位置是在wx的头文件里,而且形参中用了LPCTSTR这样的带宏检查的类型。编译器知道调用Unicode版的函数却不知道用Unicode版的指针!我们知道在Windows里编译器是通过_UNICODE这个宏来决定编译Unicode还是ANSI版本函数的,但_UNICODE这个宏对LPCTSTR这个类型不起作用。后来百度了一下才知道还有个UNICODE宏,于是在宏预定义里加入了UNICODE,就可以了。
小结:在Windows(g++)上编译Unicode代码时要加入_UNICODE和UNICODE两个宏的定义。
(如果已经配置好g++的编译选项则不用加)
<pre name="code" class="cpp">#ifdef _UNICODE
ret rn CreateDialogW(hInstance, pTemplate, hwndParent, pDlgProc);#else return CreateDialogA(hInstance, pTemplate, hwndParent, pDlgProc);#endif