中易网

C++ TEXT宏问题

答案:3  悬赏:30  
解决时间 2021-04-09 06:06
请看下面代码

代码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"));
最佳答案
看看你的编译器对TEXT是如何定义的,能否使用变量作参数.
全部回答
text是个宏 #define text(quote) __text(quote) #define __text(quote) l##quote 就相当于给括号里的字符串加上前缀 l ,使之变为宽字节字符串
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函数。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
仿写 我爱这土地 拜托各位高手前来相助!
福利分房办理房产证都需要哪些证件?
#include<stdio.h> main() { float i; i=12.5
中国银行卡补办 时他给我的纸条丢了那身份证
亮点纹刺美甲在什么地方啊,我要过去处理事情
优美大方而不俗气是哪个词语的意思
语文题 课文:http://www.lbx777.com/yw08/x_
冒险岛环绕戒指最多能带几个
小叶苦丁茶可以减肥吗?
求一部 英文字母F开头的日本动漫
海贼王,405J、暴君熊让路飞他们全部消失,是
比亚迪f3怠速后视镜抖动
惠客隆超市丰惠店地址在哪,我要去那里办事
赛格电子市场在全国有几家
ga965p-ds3主板配什么cpu,,什么显卡好
推荐资讯
超能失控2到底什么时候上映
在赶集网上看到一则招聘信息是富士康的,招聘
腿风湿病应注意些什么
说话晚是怎么回事
想知道:南通市 从如皋汽车站到江苏省南通市如
现浇楼板开洞60*60cm影响安全吗?洞两侧都有
东经139.46北纬35.42是哪?
21度时候乙苯的密度
李章村小学怎么去啊,有知道地址的么
血常规平均血小板体积偏低
在梦里看见我自己
华硕电脑怎样打开wifi
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?