2014-03-13 41 views
-2

我有功能写有参数LPCTSTR winapi函数的路径CreateFile。如何将char[]转换为LPCTSTR并将其传递给func? P.S.我“已经看到其他的主题,并没有什么有用的如何将char []转换为LPCTSTR?

+1

我建议使用这些版本的广泛版本,而不是'T *'版本,除非您打算支持极其旧版本的Windows。 – chris

+0

[http://social.msdn.microsoft.com/Forums/vstudio/en-US/b073d1cb-cb16-4956-b3ef-9021265f8efe/convert-char-to-lpctstr]? – Jayce

回答

3

LPCTSTR是宏const TCHAR*TCHAR要么是取决于是否UNICODE(在旧版本的Visual c unsigned short ++)charwchar_t定义。你有几个选项:

  1. 使用的TCHAR[]代替char[]您可以使用TEXTT宏做到这一点,对于字符串字面量

  2. 取消定义UNICODE并构建您的项目时不支持宽字符。 (相反,您可以将其定义并使用宽字符集而不是ANSI)。

  3. 执行从单个字节到多字节字符集的转换。你可以找到更多关于字符集和转换函数的信息here

A中提出的选项是使用CreateFileW(或CreateFileA取决于你的欲望)而不是CreateFile(将映射到任何一个取决于UNICODE预处理器标志前面提到的函数)。

+2

它是'char'或'wchar_t' –

+0

为什么你会在新代码中使用TCHAR等? –

+0

@DavidHeffernan而'wchar_t'是'unsigned short'的一个typedef(尽管如果内存服务的话,他们在C++ 11中将它添加为一个原始类型 - [他们确实](http://msdn.microsoft.com /en-us/library/dh8che7s.aspx))。 –

2

请致电CreateFileA(明确要求窄字符版本),并直接将char []直接传递给它,不需要强制转换。

+0

它的工作原理!谢谢! – prozac631

+2

@prozac现在你的程序被困在ANSI字符集中。你为什么想要对自己施加这种冲击。我们其他人花了数年的时间学习藐视ANSI。这是2014年。世界上不是每个人都会说英语。 –

+0

@David这个选择已经通过'char'完成。 (好吧,它可能是UTF8,但Windows会让你非常痛苦。) –