急!WinCE3, MIPS平台下函数参数为CString的一个怪异问题??

solobird 2005-08-02 10:55:42
问题描述如下:
以下代码是我这里很典型的一个函数调用关系。其中DoCreditPrint和SaveCreditInfo函数的参数都是CString. EVC的编译平台是MIPS,执行平台为WinCE3.0.采用UniCode方式编译。但是Debug的时候,作为参数传进来的CString显示在Watch监视窗口里面的字符串是乱码,直接察看CString的m_pchData的内存地址中存储的字符串信息也确为乱码,但是奇怪的是,函数内部使用的时候譬如CString 的Mid函数,处理的结果却是对的。而且跟踪Mid函数,发现Mid函数中m_pchData的地址竟然和参数传进来的时候不一致。如下

void CDlg_Credit::DoRun()
{
CString strInfo = SetCreditInfo();
//strInfo->m_pchData的内部地址0x001108e4,字符显示正确,
//察看内存发现字符的确是按照Unicode存储。

RETAILMSG(1,(L"UP1: %s\r\n", strInfo));
SaveCreditInfo(strInfo);

RETAILMSG(1,(L"Down1: %s\r\n", myUtil.strPage));
DoCreditPrint(CString strInfo);
}
void CDlg_Credit::DoCreditPrint(CString strInfo)
//strInfo->m_pchData的内部地址0x1e14d7dc,字符显示乱码,
//察看内存发现字符的确也是乱码
{
CDlg_Print dlg(printType, this);
dlg.m_strConCode = m_strReturnCode;
SetCreditPrintData();

int index1 = strInfo.Find(_T("cardInfo="))+9;
CString strBefore = strInfo.Mid(0,index1);
//跟踪到CString的代码中strInfo->m_pchData的内部地址0x00114a24,
//字符串显示正确

dlg.DoModal();
}

void CDlg_Credit::SaveCreditInfo(CString creditInfo)
//creditInfo->m_pchData的内部地址 0x1e14d7dc,表现乱码
{
g_bOnLine = myUtil.StartGetData(creditInfo,false);
//这里按f11跟踪到CString的代码里,
//发现creditInfo->m_pchData的内部地址 0x001107b4,字符串表现正确
}

虽然运行不会出错误,但是Debug的时候,就无法看到正确的传进来的参数了。我现在在查找程序中处理字符串的一个Bug.可现在看不到正确的传参,很不方便。麻烦大家帮忙想想,什么可能引起这个问题?编译参数?
...全文
59 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
西山小月 2005-08-02
  • 打赏
  • 举报
回复
字符串使用之前初始化为空试试呢。
无聊客 2005-08-02
  • 打赏
  • 举报
回复
如果没有用到CString的函数,建议参数改为传递LPCTSTR,如果要用到,建议传引用,避免没有必要的拷贝,
比如
void CDlg_Credit::DoCreditPrint(CString strInfo)
可改成
void CDlg_Credit::DoCreditPrint(const CString& strInfo)
或者
void CDlg_Credit::DoCreditPrint(CString& strInfo)
另外在观察变量时需确保该变量已经被初始化过.

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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