• [转]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

  • 相关阅读:
    jquery选择器
    frameset的target属性
    最长回文子串 南邮NOJ 1100
    最长回文子串 南邮NOJ 1100
    最长回文子串 南邮NOJ 1100
    NOJ 蛇形填数 1094
    NOJ 蛇形填数 1094
    NOJ 蛇形填数 1094
    NOJ 蛇形填数 1094
    开灯问题 南邮NOJ 1589 (另一种解法)
  • 原文地址:https://www.cnblogs.com/answer/p/1397703.html
Copyright © 2020-2023  润新知