Windows编程陷阱之 *
2015-05-31 10:30
197 查看
一、 之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 _UNICODEret rn CreateDialogW(hInstance, pTemplate, hwndParent, pDlgProc);#else return CreateDialogA(hInstance, pTemplate, hwndParent, pDlgProc);#endif
相关文章推荐
- PHP面向过程方式操作数据库(扩展增强库MySQLi)
- python str.translate()函数用法
- 【整理】队列特征以及代码的实现
- Java 虚拟机
- php转json格式出现中文的解决办法
- Thinkphp 3.0 得取最后的Sql 语句操作
- 跟我学Java反射——二步曲
- JAVA中的容器
- 【ci框架】config.php配置文件解读
- Eclipse配置Android开发环境
- 排序算法代码汇总
- github使用指南(已被markdown版本替代)
- 实现Java中的ArrayList
- java Network programming using socket(1)
- java Network programming using socket(2)
- QT配置opencv开发环境
- Struts2中的OGNL详解
- PHP面向对象方式操作数据库(扩展增强库MySQLi)
- java计时器Timer的几种使用方法
- 我也能上google