FAQ: Cannot convert from 'const char [..]' to 'LPCTSTR'

翻译 2013年12月02日 18:58:33

这两天在做visual c++网络编程,从vc6.0迁移到visual studio2010过程中遇到了一些问题。

这是我要编译的一个代码段,

MessageBox("服务器地址或者端口不能为空");

当我编译工程之后出现了这样的错误:

error C2664: 'CWnd::MessageBoxW' : cannot convert parameter 1 from 'const char []' to 'LPCTSTR'

然后查了一下:

这个问题的原因是当试图将一个多字节字符串传送给一个需要unicode类型字符串(LPCTSTR)为参数的函数时,LPCTSTR类型就扩展为TCHAR*,当编译多字节字符串和unicode类型的wchar_t时TCHAR是char型。因为编译器不接受char数组,所以我们假设TCHAR类型在本次编译中为wchar_t型

(This error message means that you are trying to pass a multi-byte string (const char[]) to a function which expects a

 unicode string (LPCTSTR). The LPCTSTR type extends to const TCHAR*, where TCHAR is char when you compile for

 multi-byte and wchar_t for unicode. Since the compiler doesn't accept the char array, we can safely assume that the

 actual type of TCHAR, in this compilation, is wchar_t.)

解决的办法是:

1.改变工程设置使它能够用多字节字符串:按ALT+F7打开属性工程窗口,然后点击Configuration Properties>General.将Switch Character Set改为“Use Multi-Byte Character Set”。(其实我改了之后已经可以解决问题啦!)

2.

You will have to do one of two things:

  1. Change your project configuration to use multibyte strings. Press ALT+F7 to open the properties, and navigate to Configuration Properties > General. Switch Character Set to "Use Multi-Byte Character Set".
  2. Indicate that the string literal, in this case "Hello world!" is of a specific encoding. This can be done through either prefixing it with L, such as L"Hello world!", or surrounding it with the generic _T("Hello world!") macro. The latter will expand to the L prefix if you are compiling for unicode (see #1), and nothing (indicating multi-byte) otherwise.
变化:

Another error message, indicating the same problem, would be:

cannot convert parameter 1 from 'const char [12]' to 'LPCWSTR'

Where LPCWSTR maps to a wchar_t pointer, regardless of your build configuration. This problem can be resolved primarily by using solution #2, but in some cases also #1. A lot of the Microsoft provided libraries, such as the Platform SDK, have got two variations of each function which takes strings as parameters. In case of a unicode build, the actual functions are postfixed W, such as the MessageBoxW seen above. In case of multi-byte, the function would be MessageBoxA (ASCII). Which of these functions is actually used when you compile your application, depends on the setting described in resolution #1 above.

这是原文章的链接:http://social.msdn.microsoft.com/Forums/vstudio/en-US/c1b08c0a-a803-41c3-ac8c-84eba3be1ddb/faq-cannot-convert-from-const-char-to-lpctstr?forum=vclanguage

Cannot convert from 'const char [..]' to 'LPCTSTR'

我是用Visual   studio   2005的默认设置,照书上按部就班,不曾定义什么_UNICODE(看了文档,这个好像是16位一个字符的意思吧?方便国际化,呵呵,不太懂)。不过,我的程序只要涉...
  • luxuejuncarl
  • luxuejuncarl
  • 2008年07月05日 16:03
  • 5535

VC错误之_cannot convert parameter 2 from 'const char [12]' to 'LPCWSTR'

Question         I'm trying to compile a piece of code such as: MessageBox("Hello world!"); ... w...
  • zxj2018
  • zxj2018
  • 2011年09月10日 02:00
  • 10134

cannot convert parameter 2 from 'const char[15]' to 'LPWSTR';

用于监控另一个进程,发现该进程关掉了就自动把它重启。 可以用脚本程序,如vbs或者bat实现。下面程序使用C++实现:用于监视目标程序HTServer.exe,如果目标程序没有在运行,则运行目标...
  • e_wsq
  • e_wsq
  • 2013年05月31日 08:39
  • 1483

const char to LPCTSTR不能转化问题

 const char to LPCTSTR不能转化问题  Visual C++ 2008里cannot convert parameter 1from const char [...
  • tunnel115
  • tunnel115
  • 2009年01月05日 10:22
  • 14998

2014-04-02工作日志:error C2440: 'initializing' : cannot convert from 'char [8]' to 'unsigned short *'

#include #include #include #include void main() { DWORD dwCount; TCHAR *tC1="topStar"; TCHAR ...
  • lz465350
  • lz465350
  • 2014年04月02日 09:49
  • 1517

string转Char*( error C2440: '=' : cannot convert from 'const char *' to 'char *')

今天遇到一个问题string转char*总是失败提示错误为  error C2440: '=' : cannot convert from 'const char *' to 'char *' 源...
  • ningyaliuhebei
  • ningyaliuhebei
  • 2015年05月27日 13:31
  • 5623

Vs2010出现错误:cannot convert from 'const char [7]' to 'LPCWSTR'

VC++ 出现错误:cannot convert from 'const char [ ]' to 'LPCWSTR'和 宏 _T()用处  解决方法: 方法一:   菜单栏- 方...
  • wanrenwangxuejing
  • wanrenwangxuejing
  • 2014年05月14日 09:27
  • 1768

使用atoi 报错:cannot convert parameter 1 from '_TCHAR *' to 'const char *'

出错是因为atoi仅支持ASCII字符串,但你传递给它的是一个UTF-16的字符串,可以用_ttoi 替换掉atoi。...
  • ochonglangzheo
  • ochonglangzheo
  • 2013年03月12日 16:02
  • 1809

cannot convert wchar_t to const char*

答案转自 http://www.codeguru.com/forum/showthread.php?t=447827  主要内容为: WideCharToMultiByte() 使用这个函数进行转换、...
  • gengxt2003
  • gengxt2003
  • 2010年11月08日 11:00
  • 2260

cannot convert parameter 1 from 'CString' to 'const char *转换问题

如题 ,最近编写网络套接口程序,在运用inet_addr(const char *)时,由于传递的实参为CString类型,突然遇见了如题的问题。网上也找了一些文章,有用强制转换的: 如,(char...
  • zjx8613
  • zjx8613
  • 2011年12月25日 19:26
  • 2557
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:FAQ: Cannot convert from 'const char [..]' to 'LPCTSTR'
举报原因:
原因补充:

(最多只允许输入30个字)