zoukankan      html  css  js  c++  java
  • [转]VC6创建UNICODE版Windows程序

    V6中开发可运行在不同语言系统的Unicode程序,大致步骤如下:

    1、Project — Settings — C/C++ Tab — Preprocessor definitions:中加入_UNICODE, UNICODE。这里的_UNICODE和UNICODE的区别在于:_UNICODE用于Windows头文件,UNICODE用于C运行时头文件。

    2、将代码中的所有所有的 char 用TCHAR代替,所有char* 用LPTSTR代替。所有的win32字符串API用_tcs代替以前的str。比如strcpy 改成 _tcscpy,不过有的变化不是这样的。 另外所有的字符串常量放到_T()里(或_TEXT())里。

    3、Project — Settings — Link — Category:Output — Entry-point symbol:中如果是exe执行文件添加 entry:wWinMainCRTStartup 程序入口,如果是dll添加:DllMainCRTStartup或什么也不添。

    应用程序类型 进入点 C运行库启动函数
    ANSI的GUI程序 WinMain WinMainCRTStartup
    Unicode的GUI程序 wWinMain wWinMainCRTStartup
    ANSI的CUI程序 main mainCRTStartup
    UNICODE的CUI程序 wmain wmainCRTStartup
    CUI是指控制台程序

    4、所过编译时提示缺少 mfc42ud.dll 等文件时,可以去安装文件中找到这些文件复制到VC的安装目录 /VC98/MFC/Lib下即可。

    依照上面四步做完以后,你就可以开发一个Unicode 程序了。如果想生成一个ASCII的程序,只需将第一步骤中的_UNICODE, UNICODE去掉即可。编译器会根据是否有此声明来编译相对的程序文件。

    -----------------------------------------------------------------------------------------------------------------------------------

    、使用ANSI/Unicode通用数据类型

      微软提供了一些ANSI和Unicode兼容的通用数据类型,我们最常用的数据类型有_T ,TCHAR,LPTSTR,LPCTSTR。
    顺便说一下,LPCTSTR和const TCHAR*是完全等同的。其中L表示long指针,这是为了兼容Windows 3.1等16位操作系统遗留下来的,在Win32 中以及其它的32位操作系统中,long指针和near指针及far修饰符都是为了兼容的作用,没有实际意义。P(pointer)表示这是一个指针;C (const)表示是一个常量;T(_T宏)表示兼容ANSI和Unicode,STR(string)表示这个变量是一个字符串。综上可以看出, LPCTSTR表示一个指向常固定地址的可以根据一些宏定义改变语义的字符串。比如:

    TCHAR* szText=_T(“Hello!”);TCHAR szText[]=_T(“I Love You”);LPCTSTR lpszText=_T(“大家好!”);使用函数中的参数最好也要有变化,比如:MessageBox(_T(“你好”));

      其实,在上面的语句中,即使您不加_T宏,MessageBox函数也会自动把“你好”字符串进行强制转换。但我还是推荐您使用_T宏,以表示您有Unicode编码意识。

    4、修改字符串运算问题

      一些字符串操作函数需要获取字符串的字符数(sizeof(szBuffer)/sizeof(TCHAR)),而另一些函数可能需要获取字符串的字节数sizeof(szBuffer)。您应该注意该问题并仔细分析字符串操作函数,以确定能够得到正确的结果。
    ANSI操作函数以str开头,如strcpy(),strcat(),strlen();
    Unicode操作函数以wcs开头,如wcscpy,wcscpy(),wcslen();
    ANSI/Unicode操作函数以_tcs开头 _tcscpy(C运行期库);
    ANSI/Unicode操作函数以lstr开头 lstrcpy(Windows函数);

    考虑ANSI和Unicode的兼容,我们需要使用以_tcs开头或lstr开头的通用字符串操作函数。

    来自:

    http://hi.baidu.com/michaelwdp/blog/item/2f3594ef9aaa5e30adafd526.html

  • 相关阅读:
    POJ 2923 Relocation (状态压缩,01背包)
    HDU 2126 Buy the souvenirs (01背包,输出方案数)
    hdu 2639 Bone Collector II (01背包,求第k优解)
    UVA 562 Dividing coins (01背包)
    POJ 3437 Tree Grafting
    Light OJ 1095 Arrange the Numbers(容斥)
    BZOJ 1560 火星藏宝图(DP)
    POJ 3675 Telescope
    POJ 2986 A Triangle and a Circle
    BZOJ 1040 骑士
  • 原文地址:https://www.cnblogs.com/answer/p/1397703.html
Copyright © 2011-2022 走看看