首页
社区
课程
招聘
[求助]VC++中对UNICODE的引用,大家也要注意
发表于: 2006-10-8 16:16 6423

[求助]VC++中对UNICODE的引用,大家也要注意

2006-10-8 16:16
6423

UNICODE的超大容量成为了未来程序字符串操作的主流,目前WINDOWS平台提供的绝大多数API都是以UNICODE为参数,兼容以前的那些函数也是先转换ANSI到UNICODE,再调用UNICODE版本函数。

    问题出现了,对于UNICODE的字符操作需要先对UNICODE引用,TCHAR中存在如此判断
#ifdef UNICODE
typedef WCHAR TCHAR;
#else
typedef char TCHAR;
#endif
可是,到底该如何引入UNICODE,使TCHAR自动定义为WCHAR呢?!
尝试#Define,#Typedef全部无效,TCHAR变量长度为1,WCHAR_T长度为2.....

请教下,该如何引入~~~~~~~~

感谢阅读,及给予帮助


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
2
在引用前定义UNICODE宏。
#define UNICODE
2006-10-8 16:23
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
尝试#Define,#Typedef全部无效
#define UNICODE和#define _UNICODE分别尝试过,通过
        TCHAR ss;
        wchar_t s;
    printf("\n%d%d",sizeof ss,sizeof s);
比较两个类型变量长度来判断TCHAR是否被定义为UNICODE
CHAR为1,WCHAR_T为2,THCAR一直为1

故疑惑不解,到底定义式为WHAT!
2006-10-8 16:40
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
4
最初由 薄冰 发布
尝试#Define,#Typedef全部无效
#define UNICODE和#define _UNICODE分别尝试过,通过
TCHAR ss;
wchar_t s;
printf("\n%d%d",sizeof ss,sizeof s);
........

必须定义在引用前,即定义在#include <....>前面。过了#include <....>就不起作用了。
2006-10-8 16:42
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
无效

2006-10-8 16:50
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
6
我这里可以。
#define _UNICODE

#include <TChar.h>
#include <stdio.h>

int main()
{
        printf("%d",sizeof(TCHAR));
        return 0;
}
2006-10-8 16:56
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
恩,你的代码结果为2,你测试下我的,结果就为1了

#define _UNICODE
#include <stdio.h>
#include <tchar.h>
#include <wchar.h>
void main()
{
        TCHAR A;
        wchar_t s;
        sprintf(ss,"woaini");
    printf("\n%d%d",sizeof A,sizeof s);
        while(1){};
}

不管怎么说,感谢下小虾无私的帮助

vc爱好者还是程序员的说?
2006-10-8 17:04
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
8
我试了一下,你的也是2,
#define _UNICODE
#include <stdio.h>
#include <tchar.h>
#include <wchar.h>
void main()
{
  TCHAR A;
  wchar_t s;
//  sprintf(ss,"woaini"); //提示没有ss变量,所以这个我注释掉了,
    printf("\n%d%d",sizeof A,sizeof s);
//  while(1){}; //这里会陷入死循环,所以这里也注释掉了。
}

不是程序员,只是爱好者。
2006-10-8 17:14
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
.........难道这就是传说的RP问题么

老是遇到如此特殊待遇的问题,我这衡为12

加上while(1){}是为了看结果,不然程序一闪就关掉,什么都看不到了

能传文件的话就能给小虾看看了,如何一个12
2006-10-8 17:20
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
10
我这里测试了几次,都没有出现你所说的情况,定义_UNICODE时为2,不定义_UNICODE时为1。
你试试将#include <wchar.h>去掉。
2006-10-8 17:54
0
雪    币: 216
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
今天发现问题所在了,你的是
#define _UNICODE
后面跟着
#include <TCHAR.H>
#include .............

而我的则是
#define _UNICODE
#include ***
#include ***
#include ***
#include <THCAR.H>

这里存在着一个链接范围,间隔超过1个#include,则链接断开,即使你定义了#define _UNICODE,编译器也断开与#include <THCAR.H>之间的联系

小虾你可以试试,在你的代码中加上几个无作用的引入,就会看到效果了

具体设计编译器设计结构,看哪位大虾对编译器熟悉出来解释解释吧
2006-10-9 15:09
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
在vc->Project->Settings->c++->Preprocessor definitions里加上

UNICODE, _UNICODE即可
2006-10-9 16:21
0
游客
登录 | 注册 方可回帖
返回
//