+ -
当前位置:首页 → 问答吧 → 应用程序UniCode 和 ANSI 问题(或 wchar_t* 和 char*)

应用程序UniCode 和 ANSI 问题(或 wchar_t* 和 char*)

时间:2011-12-01

来源:互联网


描述:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VC++2005下一个应用程序(UniCode 工程), 它要调用一个开源的代码(开源的代码是经过测试的).  

开源代码中一个函数定义如下:
int WINAPI OpenPortAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc);
int WINAPI OpenPortAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc)
{
  ....
}
描述:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



现在的情况:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
改开源代码:
int WINAPI OpenPortAndConnect (HANDLE &hCom, wchar_t* cPort, UCHAR flagCrc);
int WINAPI OpenPortAndConnect (HANDLE &hCom, wchar_t* cPort, UCHAR flagCrc)
{
  ....
}

void Crm900Dlg::OnBnClickedButton1()
{
  wchar_t* comchar=L"COM3:";
  CString ComboText;
   
  ctrCombo.GetWindowText(ComboText); //combobox 控件, 得到控件所选的COM口.
  comchar = ComboText.GetBuffer(ComboText.GetLength());

  if (OpenPortAndConnect(hCom, comchar, CRC))
  {
  //这样可以连接成功
  }
}
现在的情况:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++




出现的问题:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
int WINAPI OpenPortAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc);
int WINAPI OpenPortAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc)
{
  ....
}

void Crm900Dlg::OnBnClickedButton1()
{
  char* comchar="COM3:";
  CString ComboText;
   
  ctrCombo.GetWindowText(ComboText); //combobox 控件
  strcpy(comchar, (const char *)ComboText.GetBuffer(ComboText.GetLength()));

  if (OpenPortAndConnect(hCom, comchar, CRC)) // 或 if (OpenPortAndConnect(hCom, "COM:3", CRC))
  {
  //这样连接不成功
  }
}
出现的问题:+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



想得到的结果:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

(想维护开源代码的完整性, 不到改动开源代码)
int WINAPI OpenPortAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc);
int WINAPI OpenPortAndConnect (HANDLE &hCom, char* cPort, UCHAR flagCrc)
{
  ....
}

void Crm900Dlg::OnBnClickedButton1()
{
  char* comchar="COM3:";
  CString ComboText;
   
  ctrCombo.GetWindowText(ComboText); //combobox 控件

//这里应如何处理呢?
  OpenPortAndConnect(hCom, comchar, CRC);

}
想得到的结果:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

作者: shenzhentom   发布时间: 2011-12-01

程序是Unicode属性的,你用char当然出错

在 类视图 中,右键单击程序, 属性->常规->项目默认值 里的 字符集 从 “使用Unicode字符集”改为“未设置” 

应该就行了

作者: bazzi2011   发布时间: 2011-12-01