Это версия ответа пользователя TCHAR, поэтому она будет работать как ASCII ( normal ) или Unicode (более или менее).
#define DEBUG_OUT( fmt, ...) DEBUG_OUT_TCHAR( \
TEXT(##fmt), ##__VA_ARGS__ )
#define DEBUG_OUT_TCHAR( fmt, ...) \
Trace( TEXT("[DEBUG]") #fmt, \
##__VA_ARGS__ )
void Trace(LPCTSTR format, ...)
{
LPTSTR OutputBuf;
OutputBuf = (LPTSTR)LocalAlloc(LMEM_ZEROINIT, \
(size_t)(4096 * sizeof(TCHAR)));
va_list args;
va_start(args, format);
int nBuf;
_vstprintf_s(OutputBuf, 4095, format, args);
::OutputDebugString(OutputBuf);
va_end(args);
LocalFree(OutputBuf); // tyvm @sam shaw
}
Я говорю «более или менее», потому что он не будет автоматически преобразовывать строковые аргументы ASCII в WCHAR, но он должен вытащить вас из большинства фрагментов Unicode, не беспокоясь о переносе строки формата в TEXT ) или перед ним с L.
В основном получено из MSDN: получение кода последней ошибки