Я некоторое время искал в Интернете, как вывести целое число или, возможно, число с плавающей точкой, используя OutputDebugString ().
Было бы проще, если бы я мог записать свои данные отладки прямо в консоль из моего внешнего исполняемого файла, используя эту команду. Однако я получил его только для работы с const char.
Решения, которые я нашел, устарели, я пытался копировать и вставлять код прямо из Интернета, но не работал. Даже после внесения изменений в код я не смог правильно передать его.
Есть ли кто-нибудь, кто мог бы помочь мне привести что-то к типу в OutputDebugString настолько чисто, насколько это возможно, это только для целей отладки, поэтому я предпочитаю держать код коротким и легко читаемым, чем иметь более сложный и неуклюжий тип-IF, который возможен. Большое спасибо!
OutputDebugString может принимать только строки, если вы хотите форматированный вывод, вам придется сделать это самостоятельно, прежде чем передать его в OutputDebugString. Если вы используете MSVC, я предлагаю вам использовать _CrtDbgReport или _CrtDbgReportW. В последних версиях MSVC, которые поддерживают макросы variadic, я использую следующее:
#if !defined(_RPTW)
#if defined(_DEBUG)
#define _RPTW(pszFmt, ...) _CrtDbgReportW(_CRT_WARN, NULL, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#define _RPTW_(dest, fmt, ...) _CrtDbgReportW((dest), NULL, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#else
#define _RPTW(pszFmt, ...)
#define _RPTW(dest, pszFmt)
#endif
#endif // #if !defined(_RPTW)
#if !defined(_RPTA)
#if defined(_DEBUG)
#define _RPTA(pszFmt, ...) _CrtDbgReport(_CRT_WARN, NULL, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#define _RPTA_(dest, fmt, ...) _CrtDbgReport((dest), NULL, __LINE__, NULL, (pszFmt), __VA_ARGS__)
#else
#define _RPTA(pszFmt, ...)
#define _RPTA_(dest, pszFmt)
#endif
#endif // #if !defined(_RPTA)
#if !defined(_RPTT)
#if defined(_UNICODE)
#define _RPTT _RPTW
#define _RPTT_ _RPTW_
#else
#define _RPTT _RPTA
#define _RPTT_ _RPTA_
#endif
#endif // #if !defined(_RPTT)
Вторые формы позволяют предоставлять отчет другого уровня (_CRT_ASSERT или c_CRT_ERROR вместо _CRT_WARN)
Других решений пока нет …