急!WinCE3, MIPS平台下函数参数为CString的一个怪异问题??
问题描述如下:
以下代码是我这里很典型的一个函数调用关系。其中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.可现在看不到正确的传参,很不方便。麻烦大家帮忙想想,什么可能引起这个问题?编译参数?