9#if defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)
18#if defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)
19extern "C" __declspec(dllimport)
void __stdcall OutputDebugStringW(
const wchar_t* lpOutputString);
21extern "C" __declspec(dllimport)
void __stdcall OutputDebugStringA(
const char* lpOutputString);
23extern "C" __declspec(dllimport)
int __stdcall IsDebuggerPresent();
32 template <
typename Mutex>
33 class msvc_sink :
public base_sink<Mutex>
36 msvc_sink() =
default;
37 msvc_sink(
bool check_debugger_present)
38 : check_debugger_present_{check_debugger_present} {};
41 void sink_it_(
const details::log_msg& msg)
override
43 if (check_debugger_present_ && !IsDebuggerPresent())
48 base_sink<Mutex>::formatter_->format(msg, formatted);
49 formatted.push_back(
'\0');
50#if defined(SPDLOG_WCHAR_TO_UTF8_SUPPORT)
51 wmemory_buf_t wformatted;
52 details::os::utf8_to_wstrbuf(
string_view_t(formatted.data(), formatted.size()), wformatted);
53 OutputDebugStringW(wformatted.data());
55 OutputDebugStringA(formatted.data());
59 void flush_()
override
63 bool check_debugger_present_ =
true;
66 using msvc_sink_mt = msvc_sink<std::mutex>;
67 using msvc_sink_st = msvc_sink<details::null_mutex>;
69 using windebug_sink_mt = msvc_sink_mt;
70 using windebug_sink_st = msvc_sink_st;
fmt::basic_string_view< char > string_view_t
Definition common.h:172
fmt::basic_memory_buffer< char, 250 > memory_buf_t
Definition common.h:173