我用vc.net 建立的缺省win32窗口程序 我在项目属性里设置UNICODE方式可以编译成UNICODE程序.如果在CPP里所有头文件前定义#define UNICODE 编译出来的不是UNICODE程序,为什么? 有什么不同?

解决方案 »

  1.   

    你知道是具体什么预编译选项吗?但是 如果我在属性里设置了UNICODE 然后又在CPP里定义UNICODE 编译的时候说重定义了UNICODE或_UNICODE.不知道怎么回事.是不是算可见?
      

  2.   

    系统预定义的在整个编译环境中都可见,你去看看一些头文件,随时可见
    #ifdef _UNICODE
     
    #else#endif
    的条件编译语句。
      

  3.   

    看到的阿.如果我定义_UNICODE那 #ifdef _UNICODE就成立.它应该用unicode方式的定义. 也没有什么疑问阿.
      

  4.   

    NT系统(WINNT/WIN2000/WINXP/WIN2003)的内核是unicode代码,通常vc创建的工程默认都是ansi代码(可以兼容win9x),在nt下ansi程式在调用windows API的时系统实际又进行了一次ansi到unicode的代码转化,如MoveWindowA实际上又调用MoveWindowW.如果以我们的程序不考虑win9x(早晚是明日黄花)的话,直接用unicode编译,那么程式的代码执行效率一定能增色不少.具体:
    (0).在vc编译选项上,在vc7.0以上在工程的属性页中的“字符集”选上"使用 Unicode 字符集"即可,在vc6.0下可能麻烦一点,得先把vc运行库的unicode版本复制到vc路径下,一般都是和xxx.lib的ansi对应xxxU.lib,默认装vc时是不会装的,将工程属性
    (0).1.改语言定义:
    在project settings的"C++"页中的"preprocessor definitions"中改_MBCS为_UNICODE
    (0).2.改入口函数:
    在"link"页中的"project Options"加入/entry:"wWinMainCRTStartup"
    即可.
      

  5.   

    加入 /entry:"wWinMainCRTStartup" 编译时说 忽略未知选项'/entry:' 纳闷了. 没有写错啊