如何将char数组转换为LPCTSTR

how to convert char array to LPCTSTR

本文关键字:转换 LPCTSTR 数组 char      更新时间:2023-10-16

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

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是否提供LOGWriteEntrychar版本,并使用该替代方案
  • 如果不存在LOGWriteEntrychar版本,则通过编写一个来扩展该API。也许它可以写为LOGWriteEntry的剪切和粘贴克隆,将所有TCHAR的使用替换为char,并将较低级别的函数替换为其ASCII等价函数。例如,如果LOGWriteEntry恰好调用Windows API函数ReportEvent,则LOGWriteEntryA版本可能会调用ReportEventA
  • 实际上,在现代应用程序中,您应该忘记char,而只在任何地方使用wchar_t(与Microsoft的WCHAR兼容(。在Unicode构建下,TCHAR变为WCHAR。即使你没有提供程序的翻译版本(所有的UI元素和帮助文本都是英文(,一个使用宽字符的程序至少可以输入、处理和输出国际文本,所以它已经"达到了一半">