typedef struct tagSERIALDATA
{
CHAR serialData[10];
INT serialDataLength;
}SERIALDATA,*PSERIALDATA;
if (28 == pCopyDataStruct->dwData)
{
if (pCopyDataStruct->cbData == 0 || NULL == pCopyDataStruct->lpData)
{
return FALSE;
}
nuMemset(&s_SerialData,0,sizeof(s_SerialData));
nuMemcpy(&s_SerialData,pCopyDataStruct->lpData,sizeof(s_SerialData));
NURO_UI_MESSAGE nrMsg = {0};
nrMsg.nMsgID = _MSG_HS_TO_NAVI_SERIALDATA_;
nrMsg.nParam1 = (DWORD)&s_SerialData;
if (0 != nrMsg.nMsgID)
{
m_LoadCallmgr.Message(nrMsg);
}
return TRUE;
}
return CDialog::OnCopyData(pWnd, pCopyDataStruct);
}
同事定义的结构体也是char类型的,但是后面的函数我要用到wchar类型,所以在下面的函数中做了如下的转化:
nuUINT CNLCViewVersionDlgJP::nSetVersionText()
{
//#ifdef VALUE_EMGRT
nuWcscpy(m_NR_VERSION.wKernelVer, s_pNchStringJP->wGetString(_STR_KERNEL_VERSION_));
//#else
//nuWcscpy(m_NR_VERSION.wKernelVer, (nuWCHAR *)_NR_KERNEL_VERSION_);
//#endif
#ifdef VALUE_EMGRT
nuWcscpy(m_NR_VERSION.wMapVer, s_pNchStringJP->wGetString(_STR_MAP_VERSION_));
#endif
nuWcscpy(m_NR_VERSION.wMapSource, s_pNchStringJP->wGetString(_STR_MAP_SOURCE_));
nuWcscpy(m_wVerNum,s_pNchStringJP->wGetString(_STR_VERSION_NUMBER_));
vSetObjectText(_ID_STATIC_KERNEL_VER_, m_NR_VERSION.wKernelVer);
vSetObjectText(_ID_STATIC_MAP_VER_, m_NR_VERSION.wMapVer);
vSetObjectText(_ID_STATIC_MAP_SOURCE_, m_NR_VERSION.wMapSource);
vSetObjectText(_ID_STATIC_VER_NUMBER_,m_wVerNum);
vSetObjectText(_ID_STATIC_OS_VER_, s_stcMainCtrlVer.wOS);
vSetObjectText(_ID_STATIC_SINGLECHIP_VER_, s_stcMainCtrlVer.wSingleChip);
vSetObjectText(_ID_STATIC_HARDWARE_VER_, s_stcMainCtrlVer.wHardWare);
vSetObjectText(_ID_STATIC_MAINCTRL_VER_,s_stcMainCtrlVer.wMainCtrl);
vSetObjectText(_ID_STATIC_MAINCTRL_UID_,CGnBaseDlg::s_wHSMacUID);
1:这是第一种方法:
int numChar = ::MultiByteToWideChar(0,0,s_stcSerialData.serialData,-1,NULL,0);
nuWCHAR *b = (nuWCHAR*)malloc(numChar*sizeof(nuWCHAR));
::MultiByteToWideChar(0,0,s_stcSerialData.serialData,-1,b,numChar);
vSetObjectText(_ID_STATIC_SERIALDATA_,b);
free(b);
2:这是第二种:
// vSetObjectText(_ID_STATIC_SERIALDATA_,(nuWCHAR*)s_stcSerialData.serialData);
3:这是第三种:
// nuWCHAR SerialData[10];
// nuAsctoWcs(SerialData,10,s_stcSerialData.serialData,10);
// vSetObjectText(_ID_STATIC_SERIALDATA_,SerialData);
// /*= TEXT("1234567")*/;
nuMemset(wsimdata,NULL,sizeof(wsimdata));
//nuAsctoWcs(wsimdata,20,s_stcSimNum.simdata,20);
//vSetObjectText(_ID_STATIC_SIM_NUMBER_,/*TEXT("1234567")*/wsimdata);
return 1;
}
但是第一种和第三种,得到的确实乱码的结果,第二种报错误
下面贴同事的代码:
typedef struct tagSerialData
{
CHAR serialdata[10];
int serialDataLength;
}SERIALDATA, *PSERIALDATA;
void CHangShengMsgTestDlg::OnBnClickedButton6()
{
HWND hNavi = NULL;
hNavi = ::FindWindow(NULL,TEXT("guider"));
if (hNavi == NULL)
{
return ;
}
memset(&m_SerialData,0,sizeof(m_SerialData));
m_SerialData.serialDataLength = strlen("2591JKN600");
strcpy(m_SerialData.serialdata,"2591JKN600");
COPYDATASTRUCT SerialDataCopyData = {0};
SerialDataCopyData.dwData = 28;
SerialDataCopyData.cbData = sizeof(m_SerialData);
SerialDataCopyData.lpData = &m_SerialData;
::SendMessage(hNavi,WM_COPYDATA,0,(LPARAM)&SerialDataCopyData);
}
7 个解决方案
#1
MultiByteToWideChar 请正确设置第一个参数
#2
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
#3
不懂没关系,可以查 MSDN。
或者,直接网上查找,有很多现成的代码可以参考 。
#4
MultiByteToWideChar 请正确设置第一个参数 MultiByteToWideChar 请正确设置第一个参数
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
不懂没关系,可以查 MSDN。
或者,直接网上查找,有很多现成的代码可以参考 。
// int len = strlen(s_stcSerialData.serialData);
// int numChar = ::MultiByteToWideChar( CP_ACP,0,s_stcSerialData.serialData,-1,NULL,0);
//
// nuWCHAR *b = new nuWCHAR[numChar+1];
// nuMemset(b,0,(numChar+1)*sizeof(nuWCHAR));
// ::MultiByteToWideChar(CP_ACP,0,s_stcSerialData.serialData,-1,(LPWSTR)b,numChar);
// wstring rt;
// rt = (nuWCHAR *)b;
//
// vSetObjectText(_ID_STATIC_SERIALDATA_,rt);
// delete b;
从网上看的,但是写到到文件里的还是乱码
#5
MultiByteToWideChar 请正确设置第一个参数 MultiByteToWideChar 请正确设置第一个参数
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
不懂没关系,可以查 MSDN。
或者,直接网上查找,有很多现成的代码可以参考 。
// int len = strlen(s_stcSerialData.serialData);
// int numChar = ::MultiByteToWideChar( CP_ACP,0,s_stcSerialData.serialData,-1,NULL,0);
//
// nuWCHAR *b = new nuWCHAR[numChar+1];
// nuMemset(b,0,(numChar+1)*sizeof(nuWCHAR));
// ::MultiByteToWideChar(CP_ACP,0,s_stcSerialData.serialData,-1,(LPWSTR)b,numChar);
// wstring rt;
// rt = (nuWCHAR *)b;
//
// vSetObjectText(_ID_STATIC_SERIALDATA_,rt);
// delete b;
从网上看的,但是写到到文件里的还是乱码
#6
你将 Unicode 字符串写入文件,有没有在文件的开始写入 Unicode 标志,好像是 0xfffe?
#7
你将 Unicode 字符串写入文件,有没有在文件的开始写入 Unicode 标志,好像是 0xfffe?
不是那个问题,我已经解决了,谢谢
#1
MultiByteToWideChar 请正确设置第一个参数
#2
MultiByteToWideChar 请正确设置第一个参数
MultiByteToWideChar 请正确设置第一个参数
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
#3
MultiByteToWideChar 请正确设置第一个参数 MultiByteToWideChar 请正确设置第一个参数
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
不懂没关系,可以查 MSDN。
或者,直接网上查找,有很多现成的代码可以参考 。
#4
MultiByteToWideChar 请正确设置第一个参数 MultiByteToWideChar 请正确设置第一个参数
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
不懂没关系,可以查 MSDN。
或者,直接网上查找,有很多现成的代码可以参考 。
// int len = strlen(s_stcSerialData.serialData);
// int numChar = ::MultiByteToWideChar( CP_ACP,0,s_stcSerialData.serialData,-1,NULL,0);
//
// nuWCHAR *b = new nuWCHAR[numChar+1];
// nuMemset(b,0,(numChar+1)*sizeof(nuWCHAR));
// ::MultiByteToWideChar(CP_ACP,0,s_stcSerialData.serialData,-1,(LPWSTR)b,numChar);
// wstring rt;
// rt = (nuWCHAR *)b;
//
// vSetObjectText(_ID_STATIC_SERIALDATA_,rt);
// delete b;
从网上看的,但是写到到文件里的还是乱码
#5
MultiByteToWideChar 请正确设置第一个参数 MultiByteToWideChar 请正确设置第一个参数
我接受过来的是数字和字母的组合,然后有两个MultiByteToWideChar ,是在不懂怎么设置第一个参数
不懂没关系,可以查 MSDN。
或者,直接网上查找,有很多现成的代码可以参考 。
// int len = strlen(s_stcSerialData.serialData);
// int numChar = ::MultiByteToWideChar( CP_ACP,0,s_stcSerialData.serialData,-1,NULL,0);
//
// nuWCHAR *b = new nuWCHAR[numChar+1];
// nuMemset(b,0,(numChar+1)*sizeof(nuWCHAR));
// ::MultiByteToWideChar(CP_ACP,0,s_stcSerialData.serialData,-1,(LPWSTR)b,numChar);
// wstring rt;
// rt = (nuWCHAR *)b;
//
// vSetObjectText(_ID_STATIC_SERIALDATA_,rt);
// delete b;
从网上看的,但是写到到文件里的还是乱码
#6
你将 Unicode 字符串写入文件,有没有在文件的开始写入 Unicode 标志,好像是 0xfffe?
#7
你将 Unicode 字符串写入文件,有没有在文件的开始写入 Unicode 标志,好像是 0xfffe?
不是那个问题,我已经解决了,谢谢