WINDOWS7环境下CString::LoadString函数问题,随时跟帖

mudunke775 2010-12-23 04:10:23
MFC工程:环境是 使用多字节字符集
IDS_STRING102 驱逐舰
下面是2段代码

m_str.LoadString(IDS_STRING102);
//m_str = LoadCStringIDC(IDS_STRING102);
char ch[200];
memcpy(ch,m_str,m_str.GetLength());
for (int i=0;i<m_str.GetLength();++i)
{
CString strt;
strt.Format("%c\r\n%d,%d",ch[i],ch[i],i);
AfxMessageBox((strt));
}




m_str = "驱逐舰";
AfxMessageBox(m_str);
char ch[200];
memcpy(ch,m_str,m_str.GetLength());
for (int i=0;i<m_str.GetLength();++i)
{
CString strt;
strt.Format("%c\r\n%d,%d",ch[i],ch[i],i);
AfxMessageBox((strt));
}



调试后发现第一段代码循环3次,3个字符值都是63
第二段代码循环6次,字符为-57,-3,-42,-16,-67,-94。(第二段代码是我想要实现的功能,显示没有错误)

问题是现在代码大部分已经写完,很多字符串都保存在资源文件里,但是现在就是读不出来,使用过
::LoadStringW(AfxGetInstanceHandle(),IDS_STRING102,(LPWSTR)ch,1024);
但是读出来的是乱码。

我猜测是宽字符问题,各位大大帮帮忙啊
...全文
298 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2011-01-25
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖

相关规定详见界面界面版关于版主结帖工作的具体办法
jy03032712 2010-12-28
  • 打赏
  • 举报
回复
memcpy(ch,m_str.GetBuffer(m_str.GetLength()),m_str.GetLength());
我觉得这个才是楼主想要的。楼主,CSting对象的地址和它其中储存的字符串的地址不是一个。
我个人觉得CString对象这么用也是挺麻烦的。像你这样的程序部分,全部用字符串数组比较方便统一。
mudunke775 2010-12-27
  • 打赏
  • 举报
回复
创建的时候资源语言设置的是中文
Eleven 2010-12-27
  • 打赏
  • 举报
回复
你的区域语言设置的是什么?英文系统?
mudunke775 2010-12-27
  • 打赏
  • 举报
回复
ID没有冲突,是所有的字符资源都读不出来,我试过在资源文件里改LANGUAGE,还是不好用
Jimmy_Xia 2010-12-27
  • 打赏
  • 举报
回复
可能是语言编码的问题。
打开RC文件,找一下#pragma code_page(1252),看看这个数值是什么。

m_str.LoadString(IDS_STRING102);
AfxMessageBox(m_str);//看看是已经Load进来
Sou2012 2010-12-23
  • 打赏
  • 举报
回复
ID有没有冲突呢?
oyljerry 2010-12-23
  • 打赏
  • 举报
回复
rc文件里面
LANGUAGE LANG_CHINESE等设置,还需要中文系统支持》
lala_achun 2010-12-23
  • 打赏
  • 举报
回复
不用英文系统,就是建成英文工程,然后给资源文件输入中文也照样出乱码
allenhiman 2010-12-23
  • 打赏
  • 举报
回复
你的win7是什么语言的操作系统 如果是英文操作系统、?
一般如果工程里的rc文件不是用unicode编码保存的 会出现你说的乱码
碧螺春的马甲 2010-12-23
  • 打赏
  • 举报
回复
UNICODE 工程的话,你写的代码都没有考虑这个。
zhou1xp 2010-12-23
  • 打赏
  • 举报
回复
是只有这一个还是每个ID号都如此,检查是否有ID号冲突
mudunke775 2010-12-23
  • 打赏
  • 举报
回复
不是,你们没明白什么意思。现在是在WINDOWS7的环境下,资源文件里的STRING读不出来,读出来的都是?号
zgl7903 2010-12-23
  • 打赏
  • 举报
回复

m_str.LoadString(IDS_STRING102);
for (int i=0;i<m_str.GetLength();++i)
{
TCHAR ch = m_str.GetAt(i);
CString strt;
strt.Format( _T("%c\r\n%04X,%04X"),(WORD)ch,(WORD)ch,i);
AfxMessageBox((strt));
}

zhou1xp 2010-12-23
  • 打赏
  • 举报
回复
GetBuffer获取字符
nwao7890 2010-12-23
  • 打赏
  • 举报
回复
memcpy(ch,m_str.GetBuffer(1),m_str.GetLength()); ??

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧