下面这段程序有编译错误如下:
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);
谁道要如何才能解决它:问题出在那里?

解决方案 »

  1.   

    writestatus=phdadmin_putdata(phdpt,(char *)phd_tagname, phd_time, phd_val, &j);??
      

  2.   

    这句是这样的:writestatus=phdadmin_putdata(phdpt,phd_tagname, phd_time, phd_val, &j);搞错了
    该函数定义是这样的:
    ISTAT ADMAPIEXPORTED WINAPI phdadmin_putdata(PHDHANDLE handle, _TCHAR *tagname, _TCHAR *timestamp, _TCHAR *data, INT4 *SeqNo);
      

  3.   


    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)
    其他编译器也有相类似的设置。
      

  4.   

    是没有用UNICODE环境,如果用了UNICODE环境,我其它的程序行就要编译出错,看一下这段程序要怎样改才能把这句错误解决掉。
      

  5.   

    你的phdpt是干什么的?这个句柄怎么用?
      

  6.   

    WideCharToMultiByte
    这个函数是将字符串从unicode编码转为多字节字符的
    跟你上面用的函数刚好相反的功能
    楼主可以搜下这个函数
      

  7.   

    既然不是unicode项目//这个地方不要定义为宽字符指针。LPWSTR phd_time,phd_tagname,phd_val;这个函数多余的,删掉
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,sw_phd_tagname,-1,phd_tagname,phd_tagename_len+1);