Kaynağa Gözat

Merge branch 'lygstate-fixes'

* lygstate-fixes:
  Use ascii ' instead unicode ‘’
  use GetProcAddress to safe calling to RtlCaptureStackBackTrace in ctkBackTrace.cpp
Sascha Zelzer 11 yıl önce
ebeveyn
işleme
561901bd32

+ 14 - 1
Libs/Core/ctkBackTrace.cpp

@@ -154,12 +154,25 @@ int ctkBackTracePrivate::trace(void** array, size_t n) const
 
 #elif defined(Q_CC_MSVC)
 
+USHORT (WINAPI *s_pfnCaptureStackBackTrace)(ULONG, ULONG, PVOID*, PULONG) = 0;
+
 // --------------------------------------------------------------------------
 int ctkBackTracePrivate::trace(void** array, size_t n) const
 {
   if(n>=63)
     n=62;
-  return RtlCaptureStackBackTrace(0, n, array, 0);
+
+  if (s_pfnCaptureStackBackTrace == 0)
+  {
+    const HMODULE hNtDll = ::GetModuleHandleW(L"ntdll.dll");
+    reinterpret_cast<void*&>(s_pfnCaptureStackBackTrace) =
+        ::GetProcAddress(hNtDll, "RtlCaptureStackBackTrace");
+  }
+
+  if (s_pfnCaptureStackBackTrace != 0) {
+    return s_pfnCaptureStackBackTrace(0, n, array, 0);
+  }
+  return 0;
 }
 
 #else

+ 1 - 1
Libs/Core/ctkErrorLogAbstractMessageHandler.cpp

@@ -37,7 +37,7 @@ public:
   QString                     HandlerPrettyName;
 
   // Use "int" instead of "ctkErrorLogModel::TerminalOutput" to avoid compilation warning ...
-  // qhash.h:879: warning: passing ‘ctkErrorLogModel::TerminalOutput’ chooses ‘int’ over ‘uint’ [-Wsign-promo]
+  // qhash.h:879: warning: passing 'ctkErrorLogModel::TerminalOutput' chooses 'int' over 'uint' [-Wsign-promo]
   QHash<int, ctkErrorLogTerminalOutput*> TerminalOutputs;
 };