解决方案 »
- 发一个小白问题
- TCP/IP服务端多线程,给客户端发心跳包。
- 为什么文件——打开菜单项不能用
- 单文档子视图怎么挂第三方控件?谢谢
- 为什么我从ACE_Task直接继承总会出链接错误?
- 急问:关于给组合框添加变量的问题,详见内容!!!!(急)
- MDI主窗体菜单问题???
- ShellExecute(NULL,NULL,"http://www.csdn.net/",NULL,NULL,SW_SHOWNORMAL);能打开超连接吗?怎样能打开超连接?
- 线程函数中的静态函数问题 希望有经验的大牛们给个思路
- 有谁知道MFC怎样实现简单通信
- 求 VC++高手给翻译成VB.NET
- getkeystate没有成功检测到某按键是否处于按下的状态
都可以任意转换的啊
unicode下 CString是单字节的 CStringW宽字节
我用button::create创建一个自定义按扭,第一个参数填 L"csdn" ,不会出现乱码,但如果使用TCHAR型的指针传递参数,就出现乱码, 这是为什么呢?两者不都是宽字节的吗
我用button::create创建一个自定义按扭,第一个参数填 L"csdn" ,不会出现乱码,但如果使用TCHAR型的指针传递参数,就出现乱码, 这是为什么呢?两者不都是宽字节的吗
不过我要传递变量啊,比如第一个参数不用 L"名称",我传递一个TCHAR型的指针变量,就乱码了,要怎么改?
#define UNICODE
#endif#ifdef UNICODE
#ifndef _UNICODE
#define _UNICODE
#endif
#endifTCHAR是个灵活性很强的东西,在UNICODE编码中,它被当作WCHAR,但在ANSI编码中,它又被当作CHAR:#ifdef UNICODE
#define WCHAR TCHAR
#else
#define CHAR TCHAR
#endif当你传参,如果从W版->A版,必须W2C(参数)再传递,反过来一样,经C2W(参数)再传递,否则,乱码。
#define test testW
#else
#define test testA
#endifVOID testW(WCHAR *wszStr)
{
MessageBox(wszStr);
}VOID testA(CHAR *szStr)
{
WCHAR *wszStr = C2W(szStr);
testW(wszStr);
}当然,你可以只写一个版本的函数:VOID test(TCHAR *szStr)
{
MessageBox(szStr);
}这个时候,在UNICODE编码中,它被当作WCHAR,但在ANSI编码中,它又被当作CHAR。
不过,当你把使用UNICODE和ANSI编译的组件共用时,就得非常小心,参数的传递必须经宽字符<=>多字节字符转换后再传递,否则乱码。
当然,TCHAR是过度之用,不如直接使用WCHAR。