我有这样的函数,它采用可变数量的参数和构造 字符串并将其传递给另一个函数以打印日志。
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 ++代码编写的,如果有更好的方法可以让我知道.....
答案 0 :(得分:1)
您可以直接传递它:
LOGWriteEntry (buffer);
如果您使用带有Windows的古代内存模型,则可能必须明确地使用它:
LOGWriteEntry ((LPCTSTR) buffer);
校正:
LPCTSTr是Const TCHAR STRing的长指针。 (我忽略了TCHAR)第一个答案。
您必须使用MultiByteToWideChar function将buffer
复制到另一个缓冲区并将其传递给该函数:
w_char buf2 [1024];
MultiByteToWideChar (CP_ACP, 0, buffer, -1, buf2, sizeof buf2);
LOGWriteEntry (buf2);
答案 1 :(得分:1)
继续进行的好方法可能来自以下方案:
logverbose
函数以使用TCHAR
而不是char
;或char
版LOGWriteEntry
,并使用该替代方案。char
版本的LOGWriteEntry
,请通过编写一个来扩展该API。也许它可以写成LOGWriteEntry
的剪切和粘贴克隆,所有TCHAR
使用被char
替换,而低级函数替换为它们的ASCII等价物。例如,如果LOGWriteEntry
碰巧调用Windows API函数ReportEvent
,则您的LOGWriteEntryA
版本可能会调用ReportEventA
。char
并在任何地方使用wchar_t
(与Microsoft WCHAR
兼容)。在Unicode版本下,TCHAR
变为WCHAR
。即使您没有提供程序的翻译版本(所有UI元素和帮助文本都是英文),使用宽字符的程序至少可以输入,处理和输出国际文本,因此它是"中途和#34;。