下面这段程序有编译错误如下:
Compiling...
PIDlg.cpp
F:\vc\PITOPHD\PIDlg.cpp(248) : error C2664: 'phdadmin_putdata' : cannot convert parameter 2 from 'unsigned short *' to 'char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.PITOPHD.exe - 1 error(s), 0 warning(s)
程序如下:
int j;
int32 pi_pt,pi_stat,pi_tm,readstatus,writestatus;
float pi_rval;
CString s_readstatus,s_writestatus,s_phdtagname;
pi_pt=atol(m_tag_list.GetItemText(i,7));//得到PI中点号
readstatus=pisn_getsnapshot(pi_pt,&pi_rval,&pi_stat,&pi_tm);//取得快照值
s_readstatus.Format("%d",readstatus);//取快照值状态
m_tag_list.SetItemText(i,1,s_readstatus);//更新取值状态
LPWSTR phd_time,phd_tagname,phd_val;
LPCSTR sw_phd_tagname,sw_phd_time;
s_phdtagname=m_tag_list.GetItemText(i,8);//得到PHD中点名并转换成UNICODE
sw_phd_tagname=s_phdtagname;
int phd_tagename_len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_tagname,-1,NULL,0);
phd_tagname=new wchar_t[phd_tagename_len+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_tagname,-1,phd_tagname,phd_tagename_len+1);
CString s_phd_tagname,s_phd_time,istat,s_phd_val;
s_phd_time = CTime::GetCurrentTime().Format("%d-%b-%y %H:%M:%S");//取得当前时间
sw_phd_time=s_phd_time;
int phd_time_len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_time,-1,NULL,0);
phd_time=new wchar_t[phd_time_len+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_time,-1,phd_time,phd_time_len+1);//当前时间转换为UNICODE
m_tag_list.SetItemText(i,3,s_phd_time);//当前时间在列表控件中更新
//MessageBox("已取当前时间","提示",MB_ICONINFORMATION);
s_phd_val.Format("%.3f",pi_rval);//快照值转换为字符串
m_tag_list.SetItemText(i,4,s_phd_val);//当前值在列表控件中更新
int phd_val_len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,s_phd_val,-1,NULL,0);
phd_val=new wchar_t[phd_val_len+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,s_phd_val,-1,phd_val,phd_val_len+1);//快照值转换为UNICODE
//MessageBox(s_phdtagname+" "+s_phd_time+" "+s_phd_val,"提示",MB_ICONINFORMATION);
编译错误所在: writestatus=phdadmin_putdata(phdpt,phd_tagname, phd_time, phd_val, &j);//转发入PHD
s_writestatus.Format("%d",writestatus);//取快照值状态
m_tag_list.SetItemText(i,2,s_writestatus);//写入状态在列表控件中更新
delete phd_tagname,phd_val,phd_time;
// phd_tagname=NULL;
// phd_val=NULL;
// phd_time=NULL;
UpdateData(FALSE);
谁道要如何才能解决它:问题出在那里?
Compiling...
PIDlg.cpp
F:\vc\PITOPHD\PIDlg.cpp(248) : error C2664: 'phdadmin_putdata' : cannot convert parameter 2 from 'unsigned short *' to 'char *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
执行 cl.exe 时出错.PITOPHD.exe - 1 error(s), 0 warning(s)
程序如下:
int j;
int32 pi_pt,pi_stat,pi_tm,readstatus,writestatus;
float pi_rval;
CString s_readstatus,s_writestatus,s_phdtagname;
pi_pt=atol(m_tag_list.GetItemText(i,7));//得到PI中点号
readstatus=pisn_getsnapshot(pi_pt,&pi_rval,&pi_stat,&pi_tm);//取得快照值
s_readstatus.Format("%d",readstatus);//取快照值状态
m_tag_list.SetItemText(i,1,s_readstatus);//更新取值状态
LPWSTR phd_time,phd_tagname,phd_val;
LPCSTR sw_phd_tagname,sw_phd_time;
s_phdtagname=m_tag_list.GetItemText(i,8);//得到PHD中点名并转换成UNICODE
sw_phd_tagname=s_phdtagname;
int phd_tagename_len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_tagname,-1,NULL,0);
phd_tagname=new wchar_t[phd_tagename_len+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_tagname,-1,phd_tagname,phd_tagename_len+1);
CString s_phd_tagname,s_phd_time,istat,s_phd_val;
s_phd_time = CTime::GetCurrentTime().Format("%d-%b-%y %H:%M:%S");//取得当前时间
sw_phd_time=s_phd_time;
int phd_time_len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_time,-1,NULL,0);
phd_time=new wchar_t[phd_time_len+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_time,-1,phd_time,phd_time_len+1);//当前时间转换为UNICODE
m_tag_list.SetItemText(i,3,s_phd_time);//当前时间在列表控件中更新
//MessageBox("已取当前时间","提示",MB_ICONINFORMATION);
s_phd_val.Format("%.3f",pi_rval);//快照值转换为字符串
m_tag_list.SetItemText(i,4,s_phd_val);//当前值在列表控件中更新
int phd_val_len=MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,s_phd_val,-1,NULL,0);
phd_val=new wchar_t[phd_val_len+1];
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,s_phd_val,-1,phd_val,phd_val_len+1);//快照值转换为UNICODE
//MessageBox(s_phdtagname+" "+s_phd_time+" "+s_phd_val,"提示",MB_ICONINFORMATION);
编译错误所在: writestatus=phdadmin_putdata(phdpt,phd_tagname, phd_time, phd_val, &j);//转发入PHD
s_writestatus.Format("%d",writestatus);//取快照值状态
m_tag_list.SetItemText(i,2,s_writestatus);//写入状态在列表控件中更新
delete phd_tagname,phd_val,phd_time;
// phd_tagname=NULL;
// phd_val=NULL;
// phd_time=NULL;
UpdateData(FALSE);
谁道要如何才能解决它:问题出在那里?
该函数定义是这样的:
ISTAT ADMAPIEXPORTED WINAPI phdadmin_putdata(PHDHANDLE handle, _TCHAR *tagname, _TCHAR *timestamp, _TCHAR *data, INT4 *SeqNo);
1。
LPWSTR phd_time,phd_tagname,phd_val;
2。 ISTAT ADMAPIEXPORTED WINAPI phdadmin_putdata(PHDHANDLE handle, _TCHAR *tagname, _TCHAR *timestamp, _TCHAR *data, INT4 *SeqNo);
3。 F:\vc\PITOPHD\PIDlg.cpp(248) : error C2664: 'phdadmin_putdata' : cannot convert parameter 2 from 'unsigned short *' to 'char *'从这些来看,可能你程序不是用的UNICODE环境,这样_TCHAR 就被编译器翻译成char* 而不是w_char(unsigned short)了。如果是VC6,你需要把Project=>Setting...=>C/C++=>(remove _MSCS, add UNICODE and_UNICODE)
其他编译器也有相类似的设置。
这个函数是将字符串从unicode编码转为多字节字符的
跟你上面用的函数刚好相反的功能
楼主可以搜下这个函数
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_tagname,-1,phd_tagname,phd_tagename_len+1);