将编辑控件值与字符串进行比较

时间:2013-12-12 06:14:45

标签: winapi visual-c++

我在对话框中有2个编辑控件。然后单击Ok Button我想将此值与字符串进行比较。

case IDC_BUTTON1:
         UINT WINAPI GetDlgItemText(
  _In_   HWND hDlg,
  _In_   int nIDDlgItem,
  _Out_  LPTSTR lpString,
  _In_   int nMaxCount
);

 TCHAR szBuf[BUFF_LEN];
 TCHAR szBuf1[BUFF_LEN];
GetDlgItemText(hDlg, IDC_EDIT1, szBuf, BUFF_LEN - 1);
GetDlgItemText(hDlg,IDC_EDIT2,szBuf1,BUFF_LEN-1);

现在之后,如果条件检查值szBuf和szBuf1,但它说无法将cont char转换为tchar如何转换此值。

1 个答案:

答案 0 :(得分:1)

重要细节正在评论中泄露出来。这太糟糕了 - 细节应该出现在问题中。特别是你应该至少显示执行比较的代码行,这会导致编译器错误。并且应始终逐字转录编译器错误。

也就是说,看起来您正在使用wcscmp_tcscmp来执行比较。但是你传递的szBuf是一个参数的宽字符串,另一个是"hello"的文字。问题是szBuf是一个宽字符串,文字是8位,const char*

我假设你已经编写了这样的代码:

int cmp = _tcscmp(szBuf, "Hello");

编译器对象因为你已经定义了UNICODE条件,所以_tcscmp要求两个参数都是const wchar_t*类型。文字不是,const char*

所以简单的解决方案是使用宽文字:

int cmp = _tcscmp(szBuf, _T("Hello"));

那就是说,我不建议在这个时代使用TCHAR。我认为你不太可能仍然以Windows 98为目标。坚持使用Windows原生Unicode API并使用宽字符串。像这样声明你的缓冲区:

wchar_t szBuf[BUFF_LEN];

并且比较如下:

int cmp = wcscmp(szBuf, L"Hello");

通过这种方式,您可以更轻松地了解您正在使用的内容。如果总是使用TCHAR进行编译,那么使用UNICODE是一个毫无意义的练习,只会导致代码混淆。

更好的是尽可能避免使用C字符串并使用本机C ++字符串。例如,std::wstring将是明显的选择。显然,您需要将C字符串用于低级Windows API调用,但只要它们返回一个值,就将其传递给C ++字符串,生活将变得更加简单。