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

  • 相关阅读:
    跟踪内核启动过程CONFIG_DEBUG_LL【转自】
    为什么可能导致睡眠的函数都不能在中断上下文中使用呢?【转】
    可重入和不可重入【转】
    中断中处理延时及一些函数的调用规则(中断调i2c驱动有感)--中断中的延迟delay与printk函数的冲突【转】
    Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)【转】
    仿照linux dpm机制,实现自己的dpm【转】
    (二)内核锁的使用之信号量【转】
    linux dpm机制分析(下)【转】
    linux dpm机制分析(上)【转】
    python写一段脚本代码自动完成输入(目录下的所有)文件的数据替换(修改数据和替换数据都是输入的)【转】
  • 原文地址:https://www.cnblogs.com/answer/p/1397703.html
Copyright © 2011-2022 走看看