请看下面代码
代码01:
MessageBox(NULL, TEXT("内容") , TEXT("标题"), MB_OK);
代码02:
char Temp[] = "内容";
MessageBox(NULL, TEXT(Temp) , TEXT("标题"), MB_OK);
代码01可以正常编译的过,代码02会报错:
error C2065: “Ltemp”: 未声明的标识符
我现在的目的是想要写一个函数
使MessageBox的第二个,第三个编程动态的参数.
void MySendMessage(char* Title, char* Content)
{
MessageBox(NULL, _T(*Content) , _T(*Title), MB_OK);
return true;
}
请问要如何处理
已经写出来了
声明
bool MySendMessage(wchar_t* Title, wchar_t* Content);
调用
MySendMessage(TEXT("提示"), TEXT("测试测试123"));
C++ TEXT宏问题
答案:3 悬赏:30
解决时间 2021-04-09 06:06
- 提问者网友:挣扎重来
- 2021-04-08 17:32
最佳答案
- 二级知识专家网友:废途浑身病态
- 2021-04-08 18:23
看看你的编译器对TEXT是如何定义的,能否使用变量作参数.
全部回答
- 1楼网友:狠傷凤凰
- 2021-04-08 19:05
text是个宏
#define text(quote) __text(quote)
#define __text(quote) l##quote
就相当于给括号里的字符串加上前缀 l ,使之变为宽字节字符串
- 2楼网友:冷态度
- 2021-04-08 18:29
TEXT 和 _T 都是对 L操作符的宏定义。
在windows上
char* a1 = "123" ;单字节ascii
char* a2 = "汉字" ;多字节GBK
wchar_t* a3 = L"汉字" 双字节的unicode模式。
L的含义就是将常量定义为双字节的unicode模式。
C++中的字符串常量,无论出现多少次,只要内容一样,实际都引用的是同一段数据。
char* p1 = "123" ;
char* p2 = "123" ;
p1 == p2 的结果位true。
编译器在编译程序的时候,就所有常量字符串统一管理,放入常量池,对于重复的,只保存一份,大家使用的都是同一个常量,所以常量的正确定义格式应该是 const char* p1 = "123" 表示 这个p1代表的内存区域是不允许手动删除和修改的。
L的作用就是在编译器搜集整个程序代码的字符串常量的时候,是用单字节还是用双字节来保存。
换言之,L只对常量起作用,只在编译阶段起作用。
所以
char* p = "123"
wchar_t* p2 = _T(p) 这种是无效的,实际代码的代码是这样的wchar_t* p2 = Lp 这明显是错误代码。
对于运行时的字符串单双字节转换,用win32 API函数 MultiByteToWideChar 和 WideCharToMultiByte
然后有一个快捷定义的宏来处理单双转换。 T2A, A2T W2A A2W
比如
char* p1 = "123"
wchar_t* a1 = A2W(p1)。但是实际实现还是用的前面两个API函数。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯