如何将char数组转换为LPCTSTR
how to convert char array to LPCTSTR
我有这样的函数,它接受可变数量的参数并构造字符串,并将其传递给另一个函数以打印日志。
logverbose( const char * format, ... )
{
char buffer[1024];
va_list args;
va_start (args, format);
vsprintf (buffer,format, args);
va_end (args);
LOGWriteEntry( "HERE I NEED TO PASS buffer AS LPCTSTR SO HOW TO CONVERT buffer to LPCTSTR??");
}
除了使用缓冲区[1024],还有其他方法吗?因为log可以更大或者非常小。所有这些都是用C++代码编写的,请告诉我是否有更好的方法。。。。。
您可能只需要传递它:
LOGWriteEntry (buffer);
如果你使用的是带有windows的古代内存模型,你可能需要显式地投射它:
LOGWriteEntry ((LPCTSTR) buffer);
校正:
LPCTSTr是指向Const TCHAR STRing的长指针。(我忽略了TCHAR(。
您必须使用MultiByteToWideChar函数将buffer
复制到另一个缓冲区,并将其传递给函数:
w_char buf2 [1024];
MultiByteToWideChar (CP_ACP, 0, buffer, -1, buf2, sizeof buf2);
LOGWriteEntry (buf2);
一个好的方法可能是从这些替代方案中进行:
- 将
logverbose
函数设计为使用TCHAR
而不是char
;或 - 查明日志API是否提供
LOGWriteEntry
的char
版本,并使用该替代方案 - 如果不存在
LOGWriteEntry
的char
版本,则通过编写一个来扩展该API。也许它可以写为LOGWriteEntry
的剪切和粘贴克隆,将所有TCHAR
的使用替换为char
,并将较低级别的函数替换为其ASCII等价函数。例如,如果LOGWriteEntry
恰好调用Windows API函数ReportEvent
,则LOGWriteEntryA
版本可能会调用ReportEventA
- 实际上,在现代应用程序中,您应该忘记
char
,而只在任何地方使用wchar_t
(与Microsoft的WCHAR
兼容(。在Unicode构建下,TCHAR
变为WCHAR
。即使你没有提供程序的翻译版本(所有的UI元素和帮助文本都是英文(,一个使用宽字符的程序至少可以输入、处理和输出国际文本,所以它已经"达到了一半">
相关文章:
- 如何在Windows上将Qt QString转换为LPCTSTR
- 将 LPSTR 转换为 LPCTSTR
- 无法从'const char *'转换为'LPCTSTR'
- 如何在 C++(MFC) 中将 char* 转换为 LPCTSTR
- 将浮点数转换为 LPCTSTR 转换
- 将WCHAR转换为LPCTSTR
- 将cryptopp :: Integer转换为lpctstr
- 仅分配第一个字符,将 LPCTSTR 转换为字符*
- 如何将 LPTSTR 转换为 LPCTSTR&
- 如何将char []转换为lpctstr
- CString 到 LPCTSTR 的转换会中断 sql 查询
- 无法将参数 1 从"const char [5]"转换为"LPCTSTR"
- CString 到 LPCTSTR 的转换
- LPCTSTR 到 LPCSTR 的转换
- 如何将字符数组转换为 LPCTSTR
- 错误 C2664:'CComboBox::InsertString':无法将参数 2 从 'const char [4]' 转换为 'LPCTSTR'
- 使用 sstream 将 int 转换为 LPCTSTR 时出现奇怪的结果
- 无法在 MFC / C++ 项目中将参数 1 从'const wchar_t *'转换为'LPCTSTR'
- win32 API createFile 函数:转换为 LPCTSTR
- 字符串转换为LPCTSTR