如何将char数组转换为LPCTSTR

时间:2014-07-15 22:39:42

标签: c++

我有这样的函数,它采用可变数量的参数和构造  字符串并将其传递给另一个函数以打印日志。

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 ++代码编写的,如果有更好的方法可以让我知道.....

2 个答案:

答案 0 :(得分:1)

您可以直接传递它:

LOGWriteEntry (buffer);

如果您使用带有Windows的古代内存模型,则可能必须明确地使用它:

LOGWriteEntry ((LPCTSTR) buffer);

校正:

LPCTSTr是Const TCHAR STRing的长指针。 (我忽略了TCHAR)第一个答案。

您必须使用MultiByteToWideChar functionbuffer复制到另一个缓冲区并将其传递给该函数:

w_char buf2 [1024];
MultiByteToWideChar (CP_ACP, 0, buffer, -1, buf2, sizeof buf2);
LOGWriteEntry (buf2);

答案 1 :(得分:1)

继续进行的好方法可能来自以下方案:

  • 设计logverbose函数以使用TCHAR而不是char;或
  • 了解日志记录API是否提供charLOGWriteEntry,并使用该替代方案。
  • 如果不存在char版本的LOGWriteEntry,请通过编写一个来扩展该API。也许它可以写成LOGWriteEntry的剪切和粘贴克隆,所有TCHAR使用被char替换,而低级函数替换为它们的ASCII等价物。例如,如果LOGWriteEntry碰巧调用Windows API函数ReportEvent,则您的LOGWriteEntryA版本可能会调用ReportEventA
  • 实际上,在现代应用程序中,您应该忘记char并在任何地方使用wchar_t(与Microsoft WCHAR兼容)。在Unicode版本下,TCHAR变为WCHAR。即使您没有提供程序的翻译版本(所有UI元素和帮助文本都是英文),使用宽字符的程序至少可以输入,处理和输出国际文本,因此它是"中途和#34;。