当前位置:C++技术网 > 资讯 > 设置字符集的UNICODE和_UNICODE宏的问题分析_非VS用户指南

设置字符集的UNICODE和_UNICODE宏的问题分析_非VS用户指南

更新时间:2018-12-19 15:38:05浏览次数:1+次

    本文章只给新手中的新手看。在阅读了站长《Windows编程零基础入门课程》的3.6课之后,我终于回到了不用扣手机的环境,开始学习怎么写windows程序。

------------------------以下可以略过-----------------------------------------

    我是个看了很多C++基础书,听了很多C++基础课的人,但是就是不知道该怎么入手,现在看到这个课很是喜欢刚入手在做《Windows零基础入门:1.6 Win32 API如何获取和使用》这课例子时就出现了问题,而且是字符集,我自认为对字符集理解还是深入的,但是结果我有跪了。

----------------------问题出处-----------------------------------------------------

    我使用的不是vs环境,我使用的是eclipse+mingw环境,因为比较喜欢开源环境,又想可以同时开发PHP,就选了这个。

下面我把代码简单附上:

#include <iostream>
#include <windows.h>
int main (int argc, char** argv)
{
  std::cout << "命令行" << std::endl;
  MessageBox (NULL, L"提示框", L"标题", MB_OK);
  return 0;
}

    但是呢,我的编译器却怎么不能通过,我后来发现我的MessageBox调用的是MessageBoxA,而这个是再ASCII码下的是直接付值的,为什么我调用的不是MessageBoxW呢?

    百思不得其解,后来看了站长的《设置字符集的UNICODE和_UNICODE宏的问题分析》后,明白了,原来是字符集在作怪,但是我的eclipes该怎么设置这个预编译呢?

    搜索了网上可能真的是太简单了也没有一个人说该如何设置,只说windows->Preferences->General->Workspace->Text file encoding可以设置编码方式,但是设置了还是不行啊,这明显写着文档编码方式,而不是编译预处理,后来我进过对VS的工程文件和编译过程发现,在编译日志文件*.log中,有这样一句话CL.exe /c /ZI /nologo /W3 /WX- /sdl /Od /Oy- /D _UNICODE /D UNICODE /Gm /EHsc /RTC1 /MDd /GS /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /Fo"Debug\\" /Fd"Debug\vc140.pdb" /Gd /TP /analyze- /errorReport:prompt main.cpp,那么VS,是通过CL编译的所以这些预处理都是加载到这里,看这里有/D _UNICODE /D UNICODE,那么我们也可以效仿,我就在项目->C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Perprocessor这个就是预处理了,只要在里面加载两条_UNICODE和UNICODE,就可以实现和VS一样的效果。

    那么用惯IDE的同志们也许不知道工程师如何工作的,这里我想就告诉我们了一点。

    然后这个可以扩展,以后大家如果写makefile的话,可以吧他们加到你的配置文件中,就和设置这里预处理是一样的。

    我的水平比较差,我这也算是抛砖引玉了吧