const QString &buf)
{
QString logMessage = qMessageFormatString(type, context, buf);
-#if defined(Q_OS_WINCE)
- OutputDebugString(reinterpret_cast<const wchar_t *> (logMessage.utf16()));
-#else
+
+#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
+#if !defined(Q_OS_WINCE)
+ if (usingWinMain)
+#endif
+ {
+ // OutputDebugString is not threadsafe.
+ static QBasicMutex outputDebugStringMutex;
+ QMutexLocker locker(&outputDebugStringMutex);
+ OutputDebugString(reinterpret_cast<const wchar_t *>(logMessage.utf16()));
+ return;
+ }
+#endif // Q_OS_WIN
fprintf(stderr, "%s", logMessage.toLocal8Bit().constData());
fflush(stderr);
-#endif
}
/*!
qt_message_output(QtCriticalMsg, context, buf);
}
-#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
-extern Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char *str);
-extern Q_CORE_EXPORT void qWinMessageHandler(QtMsgType t, const QMessageLogContext &context,
- const QString &str);
-
-void qWinMessageHandler2(QtMsgType t, const QMessageLogContext &context,
- const char *str)
-{
- qWinMessageHandler(t, context, QString::fromLocal8Bit(str));
-}
-#endif
-
/*!
\typedef QtMsgHandler
\relates <QtGlobal>
messageHandler = qDefaultMessageHandler;
QtMessageHandler old = messageHandler;
messageHandler = h;
-#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
- if (!messageHandler && usingWinMain)
- messageHandler = qWinMessageHandler;
-#endif
return old;
}
msgHandler = qDefaultMsgHandler;
QtMsgHandler old = msgHandler;
msgHandler = h;
-#if defined(Q_OS_WIN) && defined(QT_BUILD_CORE_LIB)
- if (!msgHandler && usingWinMain)
- msgHandler = qWinMsgHandler;
-#endif
return old;
}
return QFileInfo(qAppFileName()).baseName();
}
-class QWinMsgHandlerCriticalSection
-{
- CRITICAL_SECTION cs;
-public:
- QWinMsgHandlerCriticalSection()
- { InitializeCriticalSection(&cs); }
- ~QWinMsgHandlerCriticalSection()
- { DeleteCriticalSection(&cs); }
-
- void lock()
- { EnterCriticalSection(&cs); }
- void unlock()
- { LeaveCriticalSection(&cs); }
-};
-
-// defined in qlogging.cpp
-extern Q_CORE_EXPORT QString qMessageFormatString(QtMsgType type,
- const QMessageLogContext &context,
- const QString &str);
-
-Q_CORE_EXPORT void qWinMessageHandler(QtMsgType t, const QMessageLogContext &context, const QString &str)
-{
- // cannot use QMutex here, because qWarning()s in the QMutex
- // implementation may cause this function to recurse
- static QWinMsgHandlerCriticalSection staticCriticalSection;
-
- QString message = qMessageFormatString(t, context, str);
-
- // OutputDebugString is not threadsafe.
- staticCriticalSection.lock();
- OutputDebugString((wchar_t*)message.utf16());
- staticCriticalSection.unlock();
-}
-
-Q_CORE_EXPORT void qWinMsgHandler(QtMsgType t, const char *str)
-{
- QMessageLogContext emptyContext;
- qWinMessageHandler(t, emptyContext, QString::fromLocal8Bit(str));
-}
-
/*****************************************************************************
qWinMain() - Initializes Windows. Called from WinMain() in qtmain_win.cpp
*****************************************************************************/
already_called = true;
usingWinMain = true;
- // Install default debug handler
- qInstallMessageHandler(qWinMessageHandler);
-
// Create command line
argv = qWinCmdLine<char>(cmdParam, int(strlen(cmdParam)), argc);