Ticket #15138: wx_trunk_15138_20130411_all.patch
File wx_trunk_15138_20130411_all.patch, 77.7 KB (added by suzumizaki, 8 years ago) |
---|
-
include/wx/msw/debughlp.h
2 2 // Name: wx/msw/debughlp.h 3 3 // Purpose: wraps dbghelp.h standard file 4 4 // Author: Vadim Zeitlin 5 // Modified by: 5 // Modified by: Suzumizaki-kimitaka 2013-04-10 6 6 // Created: 2005-01-08 (extracted from msw/crashrpt.cpp) 7 7 // RCS-ID: $Id$ 8 8 // Copyright: (c) 2003-2005 Vadim Zeitlin <vadim@wxwindows.org> … … 43 43 44 44 #if wxUSE_DBGHELP 45 45 46 /* 47 48 The table below shows which functions are exported by dbghelp.dll. 49 On 64 bit Windows, it looks no difference between 32bit dll and 50 64bit one. 51 Vista-64 and Win8-64 looks same, but in fact, "Ex" and "ExW" 52 versions are exist only in Windows 8. 53 54 Make sure SymGetLineFromAddrW and EnumerateLoadedModulesW DON'T 55 exists. 56 57 functions | Windows | XP-32 Vista-64 Win8-64 58 SymEnumSymbolsW n/a v v 59 SymFromAddrW n/a v v 60 SymInitializeW n/a v v 61 62 SymEnumSymbols v v v 63 SymFromAddr v v v 64 SymInitialize v v v 65 66 SymGetLineFromAddrW64 n/a v v 67 SymGetLineFromAddr64 v v v 68 SymGetLineFromAddrW n/a n/a n/a 69 SymGetLineFromAddr v v v 70 71 EnumerateLoadedModulesW64 n/a v v 72 EnumerateLoadedModules64 v v v 73 EnumerateLoadedModulesW n/a n/a n/a 74 EnumerateLoadedModules v v v 75 76 */ 77 78 #ifdef UNICODE 79 #define wxPENUMLOADED_MODULES_CALLBACK64 PENUMLOADED_MODULES_CALLBACKW64 80 #define wxPSYMBOL_INFO PSYMBOL_INFOW 81 #define wxSYMBOL_INFO SYMBOL_INFOW 82 #define wxPIMAGEHLP_LINE PIMAGEHLP_LINEW64 83 #define wxIMAGEHLP_LINE IMAGEHLP_LINEW64 84 #define wxPSYM_ENUMERATESYMBOLS_CALLBACK PSYM_ENUMERATESYMBOLS_CALLBACKW 85 #else 86 #define wxPENUMLOADED_MODULES_CALLBACK64 PENUMLOADED_MODULES_CALLBACK64 87 #define wxPSYMBOL_INFO PSYMBOL_INFO 88 #define wxSYMBOL_INFO SYMBOL_INFO 89 #define wxPIMAGEHLP_LINE PIMAGEHLP_LINE64 90 #define wxIMAGEHLP_LINE IMAGEHLP_LINE64 91 #define wxPSYM_ENUMERATESYMBOLS_CALLBACK PSYM_ENUMERATESYMBOLS_CALLBACK 92 #endif 93 46 94 // ---------------------------------------------------------------------------- 47 95 // wxDbgHelpDLL: dynamically load dbghelp.dll functions 48 96 // ---------------------------------------------------------------------------- … … 142 190 // function types 143 191 typedef DWORD (WINAPI *SymGetOptions_t)(); 144 192 typedef DWORD (WINAPI *SymSetOptions_t)(DWORD); 145 typedef BOOL (WINAPI *SymInitialize_t)(HANDLE, LPSTR, BOOL);146 193 typedef BOOL (WINAPI *StackWalk_t)(DWORD, HANDLE, HANDLE, LPSTACKFRAME, 147 194 LPVOID, PREAD_PROCESS_MEMORY_ROUTINE, 148 195 PFUNCTION_TABLE_ACCESS_ROUTINE, 149 196 PGET_MODULE_BASE_ROUTINE, 150 197 PTRANSLATE_ADDRESS_ROUTINE); 151 typedef BOOL (WINAPI *SymFromAddr_t)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO);152 198 typedef LPVOID (WINAPI *SymFunctionTableAccess_t)(HANDLE, DWORD_PTR); 153 199 typedef DWORD_PTR (WINAPI *SymGetModuleBase_t)(HANDLE, DWORD_PTR); 154 typedef BOOL (WINAPI *SymGetLineFromAddr_t)(HANDLE, DWORD_PTR,155 PDWORD, PIMAGEHLP_LINE);156 200 typedef BOOL (WINAPI *SymSetContext_t)(HANDLE, PIMAGEHLP_STACK_FRAME, 157 201 PIMAGEHLP_CONTEXT); 158 typedef BOOL (WINAPI *SymEnumSymbols_t)(HANDLE, ULONG64, PCSTR,159 PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID);160 202 typedef BOOL (WINAPI *SymGetTypeInfo_t)(HANDLE, DWORD64, ULONG, 161 203 IMAGEHLP_SYMBOL_TYPE_INFO, PVOID); 162 204 typedef BOOL (WINAPI *SymCleanup_t)(HANDLE); 163 typedef BOOL (WINAPI *EnumerateLoadedModules_t)(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID);164 205 typedef BOOL (WINAPI *MiniDumpWriteDump_t)(HANDLE, DWORD, HANDLE, 165 206 MINIDUMP_TYPE, 166 207 CONST PMINIDUMP_EXCEPTION_INFORMATION, 167 208 CONST PMINIDUMP_USER_STREAM_INFORMATION, 168 209 CONST PMINIDUMP_CALLBACK_INFORMATION); 169 210 211 typedef BOOL (WINAPI *EnumerateLoadedModules_t)(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID); 212 typedef BOOL (WINAPI *SymGetLineFromAddr_t)(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); 213 214 typedef BOOL (WINAPI *EnumerateLoadedModules64_t)(HANDLE, PENUMLOADED_MODULES_CALLBACK64, PVOID); 215 typedef BOOL (WINAPI *SymInitialize_t)(HANDLE, LPCSTR, BOOL); 216 typedef BOOL (WINAPI *SymFromAddr_t)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFO); 217 typedef BOOL (WINAPI *SymGetLineFromAddr64_t)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINE64); 218 typedef BOOL (WINAPI *SymEnumSymbols_t)(HANDLE, ULONG64, PCSTR, 219 PSYM_ENUMERATESYMBOLS_CALLBACK, const PVOID); 220 221 typedef BOOL (WINAPI *EnumerateLoadedModulesW64_t)(HANDLE, PENUMLOADED_MODULES_CALLBACKW64, PVOID); 222 typedef BOOL (WINAPI *SymInitializeW_t)(HANDLE, LPCWSTR, BOOL); 223 typedef BOOL (WINAPI *SymFromAddrW_t)(HANDLE, DWORD64, PDWORD64, PSYMBOL_INFOW); 224 typedef BOOL (WINAPI *SymGetLineFromAddrW64_t)(HANDLE, DWORD64, PDWORD, PIMAGEHLP_LINEW64); 225 typedef BOOL (WINAPI *SymEnumSymbolsW_t)(HANDLE, ULONG64, PCWSTR, 226 PSYM_ENUMERATESYMBOLS_CALLBACKW, const PVOID); 227 228 static BOOL EnumerateLoadedModulesT(HANDLE, wxPENUMLOADED_MODULES_CALLBACK64, PVOID); 229 static BOOL SymInitializeT(HANDLE, LPCTSTR, BOOL); 230 static BOOL SymFromAddrT(HANDLE, DWORD64, PDWORD64, wxPSYMBOL_INFO); 231 static BOOL SymGetLineFromAddrT(HANDLE, DWORD64, PDWORD, wxPIMAGEHLP_LINE); 232 static BOOL SymEnumSymbolsT(HANDLE, ULONG64, PCTSTR, wxPSYM_ENUMERATESYMBOLS_CALLBACK, const PVOID); 233 170 234 // The macro called by wxDO_FOR_ALL_SYM_FUNCS() below takes 2 arguments: 171 235 // the name of the function in the program code, which never has "64" 172 236 // suffix, and the name of the function in the DLL which can have "64" … … 175 239 #define wxSYM_CALL(what, name) what(name, name) 176 240 #if defined(_M_AMD64) 177 241 #define wxSYM_CALL_64(what, name) what(name, name ## 64) 178 179 242 // Also undo all the "helpful" definitions done by imagehlp.h that map 32 180 243 // bit functions to 64 bit ones, we don't need this as we do it ourselves. 181 244 #undef StackWalk … … 187 250 #define wxSYM_CALL_64(what, name) what(name, name) 188 251 #endif 189 252 190 #define wxDO_FOR_ALL_SYM_FUNCS(what) \ 191 wxSYM_CALL_64(what, StackWalk); \ 192 wxSYM_CALL_64(what, SymFunctionTableAccess); \ 193 wxSYM_CALL_64(what, SymGetModuleBase); \ 194 wxSYM_CALL_64(what, SymGetLineFromAddr); \ 195 wxSYM_CALL_64(what, EnumerateLoadedModules); \ 196 \ 197 wxSYM_CALL(what, SymGetOptions); \ 198 wxSYM_CALL(what, SymSetOptions); \ 199 wxSYM_CALL(what, SymInitialize); \ 200 wxSYM_CALL(what, SymFromAddr); \ 201 wxSYM_CALL(what, SymSetContext); \ 202 wxSYM_CALL(what, SymEnumSymbols); \ 203 wxSYM_CALL(what, SymGetTypeInfo); \ 204 wxSYM_CALL(what, SymCleanup); \ 253 #define wxSYM_CALL_ALWAYS_W(what, name) what(name ## W, name ## W) 254 255 #define wxSYM_CALL_ALTERNATIVES(what, name) \ 256 what(name, name); \ 257 what(name ## 64, name ## 64); \ 258 what(name ## W64, name ## W64) 259 260 #define wxDO_FOR_ALL_SYM_FUNCS_REQUIRED_PUBLIC(what) \ 261 wxSYM_CALL_64(what, StackWalk); \ 262 wxSYM_CALL_64(what, SymFunctionTableAccess); \ 263 wxSYM_CALL_64(what, SymGetModuleBase); \ 264 \ 265 wxSYM_CALL(what, SymGetOptions); \ 266 wxSYM_CALL(what, SymSetOptions); \ 267 wxSYM_CALL(what, SymSetContext); \ 268 wxSYM_CALL(what, SymGetTypeInfo); \ 269 wxSYM_CALL(what, SymCleanup); \ 205 270 wxSYM_CALL(what, MiniDumpWriteDump) 206 271 272 #define wxDO_FOR_ALL_SYM_FUNCS_REQUIRED_PRIVATE(what) \ 273 wxSYM_CALL(what, SymInitialize); \ 274 wxSYM_CALL(what, SymFromAddr); \ 275 wxSYM_CALL(what, SymEnumSymbols) 276 277 #define wxDO_FOR_ALL_SYM_FUNCS_REQUIRED(what) \ 278 wxDO_FOR_ALL_SYM_FUNCS_REQUIRED_PRIVATE(what); \ 279 wxDO_FOR_ALL_SYM_FUNCS_REQUIRED_PUBLIC(what) 280 281 // Alternation will work when the following functions are not found, 282 // therefore they are not included in REQUIRED version. 283 #define wxDO_FOR_ALL_SYM_FUNCS_OPTIONAL(what) \ 284 wxSYM_CALL_ALTERNATIVES(what, SymGetLineFromAddr); \ 285 wxSYM_CALL_ALTERNATIVES(what, EnumerateLoadedModules); \ 286 wxSYM_CALL_ALWAYS_W(what, SymInitialize); \ 287 wxSYM_CALL_ALWAYS_W(what, SymFromAddr); \ 288 wxSYM_CALL_ALWAYS_W(what, SymEnumSymbols) 289 290 #define wxDO_FOR_ALL_SYM_FUNCS(what) \ 291 wxDO_FOR_ALL_SYM_FUNCS_REQUIRED(what); \ 292 wxDO_FOR_ALL_SYM_FUNCS_OPTIONAL(what) 293 207 294 #define wxDECLARE_SYM_FUNCTION(func, name) static func ## _t func 208 295 209 wxDO_FOR_ALL_SYM_FUNCS (wxDECLARE_SYM_FUNCTION);296 wxDO_FOR_ALL_SYM_FUNCS_REQUIRED_PUBLIC(wxDECLARE_SYM_FUNCTION); 210 297 298 private: 299 wxDO_FOR_ALL_SYM_FUNCS_REQUIRED_PRIVATE(wxDECLARE_SYM_FUNCTION); 300 wxDO_FOR_ALL_SYM_FUNCS_OPTIONAL(wxDECLARE_SYM_FUNCTION); 301 302 public: 303 211 304 #undef wxDECLARE_SYM_FUNCTION 212 305 213 306 // load all functions from DLL, return true if ok … … 220 313 static void LogError(const wxChar *func); 221 314 222 315 // return textual representation of the value of given symbol 223 static wxString DumpSymbol( PSYMBOL_INFO pSymInfo, void *pVariable);316 static wxString DumpSymbol(wxPSYMBOL_INFO pSymInfo, void *pVariable); 224 317 225 318 // return the name of the symbol with given type index 226 static wxString GetSymbolName( PSYMBOL_INFO pSymInfo);319 static wxString GetSymbolName(wxPSYMBOL_INFO pSymInfo); 227 320 228 321 private: 229 322 // dereference the given symbol, i.e. return symbol which is not a … … 233 326 // dereferenced the symbol 234 327 // 235 328 // return the tag of the dereferenced symbol 236 static SymbolTag DereferenceSymbol( PSYMBOL_INFO pSymInfo, void **ppData);329 static SymbolTag DereferenceSymbol(wxPSYMBOL_INFO pSymInfo, void **ppData); 237 330 238 static wxString DumpField( PSYMBOL_INFO pSymInfo,331 static wxString DumpField(wxPSYMBOL_INFO pSymInfo, 239 332 void *pVariable, 240 333 unsigned level); 241 334 242 335 static wxString DumpBaseType(BasicType bt, DWORD64 length, void *pVariable); 243 336 244 static wxString DumpUDT( PSYMBOL_INFO pSymInfo,337 static wxString DumpUDT(wxPSYMBOL_INFO pSymInfo, 245 338 void *pVariable, 246 339 unsigned level = 0); 340 341 static bool BindDbgHelpFunctions(const wxDynamicLibrary& dllDbgHelp); 342 static bool DoInit(); 247 343 }; 248 344 249 345 #endif // wxUSE_DBGHELP -
include/wx/msw/stackwalk.h
2 2 // Name: wx/msw/stackwalk.h 3 3 // Purpose: wxStackWalker for MSW 4 4 // Author: Vadim Zeitlin 5 // Modified by: 5 // Modified by: Suzumizaki-kimitaka 2013-04-09 6 6 // Created: 2005-01-08 7 7 // RCS-ID: $Id$ 8 8 // Copyright: (c) 2005 Vadim Zeitlin <vadim@wxwindows.org> … … 20 20 21 21 // and these in dbghelp.h 22 22 struct _SYMBOL_INFO; 23 struct _SYMBOL_INFOW; 23 24 24 25 // ---------------------------------------------------------------------------- 25 26 // wxStackFrame … … 53 54 GetParam(size_t n, wxString *type, wxString *name, wxString *value) const; 54 55 55 56 // callback used by OnGetParam(), don't call directly 56 void OnParam(_SYMBOL_INFO *pSymInfo); 57 #ifdef UNICODE 58 void OnParam(_SYMBOL_INFOW * pSymInfo); 59 #else 60 void OnParam(_SYMBOL_INFO * pSymInfo); 61 #endif 57 62 58 63 protected: 59 64 virtual void OnGetName(); -
samples/except/except.bkl
6 6 <include file="../../build/bakefiles/common_samples.bkl"/> 7 7 8 8 <exe id="except" template="wx_sample" template_append="wx_append"> 9 <sources>except.cpp</sources> 9 <sources>except.cpp except_utf8.cpp</sources> 10 <headers>except_utf8.h</headers> 10 11 <wx-lib>core</wx-lib> 11 12 <wx-lib>base</wx-lib> 12 13 </exe> -
samples/except/except.cpp
2 2 // Name: samples/except/except.cpp 3 3 // Purpose: shows how C++ exceptions can be used in wxWidgets 4 4 // Author: Vadim Zeitlin 5 // Modified by: 5 // Modified by: Suzumizaki-kimitaka 2013-04-08 6 6 // Created: 2003-09-17 7 7 // RCS-ID: $Id$ 8 8 // Copyright: (c) 2003-2005 Vadim Zeitlin … … 48 48 #include "wx/thread.h" 49 49 #endif 50 50 51 #include "except_utf8.h" 52 51 53 // ---------------------------------------------------------------------------- 52 54 // resources 53 55 // ---------------------------------------------------------------------------- … … 113 115 void OnQuit(wxCommandEvent& event); 114 116 void OnAbout(wxCommandEvent& event); 115 117 void OnDialog(wxCommandEvent& event); 118 void OnDialogUnicode(wxCommandEvent& event); 116 119 117 120 void OnThrowInt(wxCommandEvent& event); 118 121 void OnThrowString(wxCommandEvent& event); … … 198 201 Except_ShowAssertInThread, 199 202 #endif // wxUSE_THREADS 200 203 Except_Dialog, 204 Except_Dialog_Unicode, 201 205 202 206 Except_Quit = wxID_EXIT, 203 207 Except_About = wxID_ABOUT … … 215 219 EVT_MENU(Except_About, MyFrame::OnAbout) 216 220 EVT_MENU(Except_Dialog, MyFrame::OnDialog) 217 221 EVT_MENU(Except_ThrowInt, MyFrame::OnThrowInt) 222 EVT_MENU(Except_Dialog_Unicode, MyFrame::OnDialogUnicode) 218 223 EVT_MENU(Except_ThrowString, MyFrame::OnThrowString) 219 224 EVT_MENU(Except_ThrowObject, MyFrame::OnThrowObject) 220 225 EVT_MENU(Except_ThrowUnhandled, MyFrame::OnThrowUnhandled) … … 349 354 // create a menu bar 350 355 wxMenu *menuFile = new wxMenu; 351 356 menuFile->Append(Except_Dialog, wxT("Show &dialog\tCtrl-D")); 357 menuFile->Append(Except_Dialog_Unicode, 358 wxT("Show dialog using &Unicode named class\tCtrl-U")); 352 359 menuFile->AppendSeparator(); 353 360 menuFile->Append(Except_ThrowInt, wxT("Throw an &int\tCtrl-I")); 354 361 menuFile->Append(Except_ThrowString, wxT("Throw a &string\tCtrl-S")); … … 427 434 } 428 435 } 429 436 437 void MyFrame::OnDialogUnicode(wxCommandEvent& WXUNUSED(event)) 438 { 439 #if STACKTRACE_CAN_INCLUDE_UNICODE 440 try 441 { 442 wxDialog* dlg = GenerateDialogUnicode(this); 443 444 dlg->ShowModal(); 445 } 446 catch ( ... ) 447 { 448 wxLogWarning(wxT("An exception in Unicode Version Dialog")); 449 450 Destroy(); 451 throw; 452 } 453 #else 454 wxMessageBox( 455 wxT("Please define STACKTRACE_CAN_INCLUDE_UNICODE as 1 and rebuild.")); 456 #endif 457 } 458 459 430 460 void MyFrame::OnThrowInt(wxCommandEvent& WXUNUSED(event)) 431 461 { 432 462 throw -17; … … 546 576 { 547 577 DoCrash(); 548 578 } 549 -
samples/except/except.dsp
31 31 MTL=midl.exe 32 32 RSC=rc.exe 33 33 34 !IF "$(CFG)" == "except - Win32 DLL Release" 34 !IF "$(CFG)" == "except - Win32 DLL Release" 35 35 36 36 # PROP BASE Use_MFC 0 37 37 # PROP BASE Use_Debug_Libraries 1 … … 148 148 # End Source File 149 149 # Begin Source File 150 150 151 SOURCE=.\except_utf8.cpp 152 # End Source File 153 # Begin Source File 154 151 155 SOURCE=.\..\..\samples\sample.rc 152 156 # End Source File 153 157 # End Group 158 # Begin Group "Header Files" 159 160 # PROP Default_Filter "" 161 # Begin Source File 162 163 SOURCE=.\except_utf8.h 164 # End Source File 165 # End Group 154 166 # End Target 155 167 # End Project 156 168 -
samples/except/except_utf8.cpp
1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: samples/except/except_utf8.cpp 3 // Purpose: 4 // Author: Suzumizaki-kimitaka 5 // Modified by: 6 // Created: 2013-04-11 7 // RCS-ID: 8 // Copyright: (C) Suzumizaki-kimitaka 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 /* 13 14 C++ specification allows non-ASCII named classes, variables, functions, etc. 15 and this file includes Unicode characters for own purpose. 16 17 Currently this file is saved as UTF-8 with Byte Order Mark. 18 If the BOM doesn't exist, Visual C++ may treat source texts as local not UTF. 19 20 Old versions of wxMSW can't treat non-ASCII named identifiers inside stack 21 tracing. Because ill versions call wxString::FromAscii with such identifiers 22 and assertion-stop raised by FromAscii throws away the information we really 23 need. Additionally to say, Ill versions used only MBCS functions implemented 24 in dbghelp.dll 25 26 Try assertion stop and check the dialog shows correctly the names of classes 27 and functions in Unicode. 28 29 When you uses outdated dbghelp.dll, or MBCS build that not support the class 30 name 'àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥', you can only check avoiding multi assertion stops. 31 32 */ 33 34 // ============================================================================ 35 // declarations 36 // ============================================================================ 37 38 // ---------------------------------------------------------------------------- 39 // headers 40 // ---------------------------------------------------------------------------- 41 42 // For compilers that support precompilation, includes "wx/wx.h". 43 #include "wx/wxprec.h" 44 45 #ifdef __BORLANDC__ 46 #pragma hdrstop 47 #endif 48 49 #include "except_utf8.h" 50 #if STACKTRACE_CAN_INCLUDE_UNICODE 51 52 #ifndef WX_PRECOMP 53 #include "wx/button.h" 54 #include "wx/sizer.h" 55 #include "wx/stattext.h" 56 #include "wx/dynlib.h" 57 #include "wx/msgdlg.h" 58 #endif 59 60 // ---------------------------------------------------------------------------- 61 // private classes 62 // ---------------------------------------------------------------------------- 63 64 // named 'Thai language, Japanese, Hindi' only for test purpose 65 class àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥ : public wxDialog 66 { 67 public: 68 àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥(wxFrame *parent); 69 70 // event handlers 71 void OnShowAssert(wxCommandEvent& event); 72 void OnThrowObject(wxCommandEvent& event); 73 void OnInvalidStringFormat(wxCommandEvent& event); 74 void OnListLoadedModules(wxCommandEvent& event); 75 76 // 'format string includes error' 77 wxString æžåŒååã®èª€ã(); 78 79 private: 80 DECLARE_EVENT_TABLE() 81 }; 82 83 // A trivial exception class 84 class MyException 85 { 86 public: 87 MyException(const wxString& msg) : m_msg(msg) { } 88 89 const wxChar *what() const { return m_msg.c_str(); } 90 91 private: 92 wxString m_msg; 93 }; 94 95 // ---------------------------------------------------------------------------- 96 // constants 97 // ---------------------------------------------------------------------------- 98 99 // IDs for the controls and the menu commands 100 enum 101 { 102 // control ids and menu items 103 Except_utf8_ShowAssert = wxID_HIGHEST, 104 Except_utf8_ListLoadedModules, 105 Except_utf8_ThrowObject, 106 Except_utf8_InvalidStringFormat, 107 }; 108 109 // ---------------------------------------------------------------------------- 110 // event tables and other macros for wxWidgets 111 // ---------------------------------------------------------------------------- 112 113 BEGIN_EVENT_TABLE(àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥, wxDialog) 114 EVT_BUTTON(Except_utf8_ShowAssert, àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnShowAssert) 115 EVT_BUTTON(Except_utf8_ListLoadedModules, àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnListLoadedModules) 116 EVT_BUTTON(Except_utf8_ThrowObject, àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnThrowObject) 117 EVT_BUTTON(Except_utf8_InvalidStringFormat, 118 àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnInvalidStringFormat) 119 END_EVENT_TABLE() 120 121 // ============================================================================ 122 // àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥ implementation 123 // ============================================================================ 124 125 àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥(wxFrame *parent) 126 : wxDialog(parent, wxID_ANY, wxString(wxT("Throw exception dialog"))) 127 { 128 wxSizer *sizerTop = new wxBoxSizer(wxVERTICAL); 129 130 sizerTop->Add(new wxStaticText(this, wxNewId(), 131 wxT("Welcome. Now you can check whether your stack trace\ncorrectly ") 132 wxT("shows non-ASCII identifier used as class name.\n\n") 133 wxT("The name of this dialog class is 'àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥'. ")), 134 0, wxCENTRE | wxALL, 5); 135 136 sizerTop->Add(new wxButton(this, Except_utf8_ThrowObject, wxT("Throw &object")), 137 0, wxCENTRE | wxALL, 5); 138 sizerTop->Add(new wxButton(this, Except_utf8_ShowAssert, 139 wxT("Show &Assert invoked from wxArrayString")), 140 0, wxCENTRE | wxALL, 5); 141 sizerTop->Add(new wxButton(this, Except_utf8_InvalidStringFormat, 142 wxT("Call wxString::&Format with bad parameter")), 143 0, wxCENTRE | wxALL, 5); 144 sizerTop->Add(new wxButton(this, Except_utf8_ListLoadedModules, 145 wxT("List loaded modules")), 146 0, wxCENTRE | wxALL, 5); 147 sizerTop->Add(new wxButton(this, wxID_CANCEL, wxT("&Cancel")), 148 0, wxCENTRE | wxALL, 5); 149 150 SetSizerAndFit(sizerTop); 151 } 152 153 void àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnThrowObject(wxCommandEvent& WXUNUSED(event)) 154 { 155 throw MyException(wxT("Exception thrown from àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥")); 156 } 157 158 void àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnShowAssert(wxCommandEvent& WXUNUSED(event)) 159 { 160 // provoke an assert from wxArrayString. 161 // to test stack trace can include non-ASCII named class. 162 wxArrayString arr; 163 arr[0]; 164 } 165 166 void àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnListLoadedModules(wxCommandEvent& WXUNUSED(event)) 167 { 168 wxDynamicLibraryDetailsArray list = wxDynamicLibrary::ListLoaded(); 169 wxString s; 170 for (size_t i=0; i<list.Count(); ++i) 171 { 172 s << list[i].GetName() << wxT(" "); 173 if (list[i].GetVersion().Trim().Trim(false).size()) 174 { 175 s << list[i].GetVersion() << wxT("\n"); 176 } 177 else 178 { 179 s << wxT("(not versioned)\n"); 180 } 181 } 182 wxMessageBox(s, wxT("The modules currently loaded are:")); 183 } 184 185 186 wxString àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::æžåŒååã®èª€ã() 187 { 188 // provoke an assert from wxString::Format. 189 // currently, assertion faied in wxArgNormalizer<int>::wxArgNormalizer<int>. 190 return wxString::Format("%s", 1717); 191 } 192 193 void àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥::OnInvalidStringFormat(wxCommandEvent& WXUNUSED(event)) 194 { 195 // to test stack trace can include non-ASCII named function. 196 æžåŒååã®èª€ã(); 197 } 198 199 // ============================================================================ 200 // global functions implementation 201 // ============================================================================ 202 203 wxDialog* GenerateDialogUnicode(wxFrame* parent) 204 { 205 return new àž àž²àž©àž²à¹àžàž¢æ¥æ¬èªà€¹à€¿à€šà¥à€Šà¥(parent); 206 } 207 208 #endif // STACKTRACE_CAN_INCLUDE_UNICODE 209 -
samples/except/except_utf8.h
1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: samples/except/except_utf8.h 3 // Purpose: check stacktrace works correctly with non-ASCII identifiers 4 // Author: Suzumizaki-kimitaka 5 // Modified by: 6 // Created: 2013-04-08 7 // RCS-ID: 8 // Copyright: (C) Suzumizaki-kimitaka 9 // Licence: wxWindows licence 10 ///////////////////////////////////////////////////////////////////////////// 11 12 #ifndef STACKTRACE_CAN_INCLUDE_UNICODE 13 #define STACKTRACE_CAN_INCLUDE_UNICODE 1 14 #endif 15 16 #if STACKTRACE_CAN_INCLUDE_UNICODE 17 18 #include "wx/dialog.h" 19 #include "wx/frame.h" 20 wxDialog* GenerateDialogUnicode(wxFrame* parent); 21 22 #endif 23 -
samples/except/except_vc7.vcproj
286 286 <File 287 287 RelativePath=".\except.cpp"> 288 288 </File> 289 <File 290 RelativePath=".\except_utf8.cpp"> 291 </File> 289 292 </Filter> 290 293 <Filter 294 Name="Header Files" 295 Filter="h;hpp;hxx;hm;inl;inc;xsd" 296 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"> 297 <File 298 RelativePath=".\except_utf8.h"> 299 </File> 300 </Filter> 301 <Filter 291 302 Name="Resource Files" 292 303 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" 293 304 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"> -
samples/except/except_vc8.vcproj
421 421 RelativePath=".\except.cpp" 422 422 > 423 423 </File> 424 <File 425 RelativePath=".\except_utf8.cpp" 426 > 427 </File> 424 428 </Filter> 425 429 <Filter 430 Name="Header Files" 431 Filter="h;hpp;hxx;hm;inl;inc;xsd" 432 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" 433 > 434 <File 435 RelativePath=".\except_utf8.h" 436 > 437 </File> 438 </Filter> 439 <Filter 426 440 Name="Resource Files" 427 441 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" 428 442 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" -
samples/except/except_vc9.vcproj
407 407 RelativePath=".\except.cpp" 408 408 > 409 409 </File> 410 <File 411 RelativePath=".\except_utf8.cpp" 412 > 413 </File> 410 414 </Filter> 411 415 <Filter 416 Name="Header Files" 417 Filter="h;hpp;hxx;hm;inl;inc;xsd" 418 UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}" 419 > 420 <File 421 RelativePath=".\except_utf8.h" 422 > 423 </File> 424 </Filter> 425 <Filter 412 426 Name="Resource Files" 413 427 Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav" 414 428 UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}" -
samples/except/makefile.bcc
24 24 WX_RELEASE_NODOT = 29 25 25 COMPILER_PREFIX = bcc 26 26 OBJS = \ 27 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG) 28 LIBDIRNAME = \ 29 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG) 27 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG) 28 LIBDIRNAME = \ 29 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG) 30 30 SETUPHDIR = \ 31 31 $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG) 32 32 EXCEPT_CXXFLAGS = $(__RUNTIME_LIBS_7) -I$(BCCDIR)\include $(__DEBUGINFO) \ 33 $(__OPTIMIZEFLAG_2) $(__THREADSFLAG_6) -D__WX$(TOOLKIT)__ \ 34 $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) \ 35 $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ 36 $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include \ 33 $(__OPTIMIZEFLAG_2) $(__THREADSFLAG_6) -D__WX$(TOOLKIT)__ \ 34 $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) \ 35 $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) \ 36 $(__UNICODE_DEFINE_p) $(__MSLU_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include \ 37 37 $(____CAIRO_INCLUDEDIR_FILENAMES_p) -I. $(__DLLFLAG_p) -I.\..\..\samples \ 38 38 -DNOPCH $(CPPFLAGS) $(CXXFLAGS) 39 39 EXCEPT_OBJECTS = \ 40 $(OBJS)\except_except.obj 40 $(OBJS)\except_except.obj \ 41 $(OBJS)\except_except_utf8.obj 41 42 42 43 ### Conditionally set variables: ### 43 44 44 !if "$(TOOLKIT)" == "GTK" 45 WIN32_TOOLKIT_LOWERCASE = gtk 46 !endif 47 !if "$(TOOLKIT)" == "MSW" 48 WIN32_TOOLKIT_LOWERCASE = msw 49 !endif 45 !if "$(TOOLKIT)" == "GTK" 46 WIN32_TOOLKIT_LOWERCASE = gtk 47 !endif 48 !if "$(TOOLKIT)" == "MSW" 49 WIN32_TOOLKIT_LOWERCASE = msw 50 !endif 50 51 !if "$(USE_GUI)" == "0" 51 52 PORTNAME = base 52 53 !endif 53 54 !if "$(USE_GUI)" == "1" 54 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 55 !endif 56 !if "$(TOOLKIT)" == "MAC" 57 WXBASEPORT = _carbon 58 !endif 59 !if "$(OFFICIAL_BUILD)" == "1" 60 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 55 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 61 56 !endif 57 !if "$(TOOLKIT)" == "MAC" 58 WXBASEPORT = _carbon 59 !endif 60 !if "$(OFFICIAL_BUILD)" == "1" 61 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 62 !endif 62 63 !if "$(BUILD)" == "debug" 63 64 WXDEBUGFLAG = d 64 65 !endif … … 83 84 !if "$(MONOLITHIC)" == "1" 84 85 EXTRALIBS_FOR_BASE = 85 86 !endif 86 !if "$(TOOLKIT)" == "GTK" && "$(TOOLKIT_VERSION)" == "2" 87 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib \ 88 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib \ 89 glib-2.0.lib 90 !endif 87 !if "$(TOOLKIT)" == "GTK" && "$(TOOLKIT_VERSION)" == "2" 88 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib \ 89 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib \ 90 glib-2.0.lib 91 !endif 91 92 !if "$(BUILD)" == "debug" 92 93 __OPTIMIZEFLAG_2 = -Od 93 94 !endif … … 190 191 !endif 191 192 !if "$(MONOLITHIC)" == "0" 192 193 __WXLIB_BASE_p = \ 193 wxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib 194 wxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib 194 195 !endif 195 196 !if "$(MONOLITHIC)" == "1" 196 197 __WXLIB_MONO_p = \ … … 249 250 250 251 $(OBJS)\except.exe: $(EXCEPT_OBJECTS) $(OBJS)\except_sample.res 251 252 ilink32 -Tpe -q -L$(BCCDIR)\lib -L$(BCCDIR)\lib\psdk $(__DEBUGINFO) -L$(LIBDIRNAME) -aa $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) @&&| 252 c0w32.obj $(EXCEPT_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__CAIRO_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG_5)$(__RUNTIME_LIBS_8).lib,, $(OBJS)\except_sample.res 253 c0w32.obj $(EXCEPT_OBJECTS),$@,, $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__CAIRO_LIB_p) ole2w32.lib oleacc.lib import32.lib cw32$(__THREADSFLAG_5)$(__RUNTIME_LIBS_8).lib,, $(OBJS)\except_sample.res 253 254 | 254 255 255 256 $(OBJS)\except_sample.res: .\..\..\samples\sample.rc 256 brcc32 -32 -r -fo$@ -i$(BCCDIR)\include -d__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) -i$(SETUPHDIR) -i.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) -i. $(__DLLFLAG_p_1) -i.\..\..\samples -dNOPCH .\..\..\samples\sample.rc 257 brcc32 -32 -r -fo$@ -i$(BCCDIR)\include -d__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) -i$(SETUPHDIR) -i.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) -i. $(__DLLFLAG_p_1) -i.\..\..\samples -dNOPCH .\..\..\samples\sample.rc 257 258 258 259 $(OBJS)\except_except.obj: .\except.cpp 259 260 $(CXX) -q -c -P -o$@ $(EXCEPT_CXXFLAGS) .\except.cpp 260 261 262 $(OBJS)\except_except_utf8.obj: .\except_utf8.cpp 263 $(CXX) -q -c -P -o$@ $(EXCEPT_CXXFLAGS) .\except_utf8.cpp 264 -
samples/except/makefile.gcc
16 16 WX_RELEASE_NODOT = 29 17 17 COMPILER_PREFIX = gcc 18 18 OBJS = \ 19 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG) 20 LIBDIRNAME = \ 21 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG) 19 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG) 20 LIBDIRNAME = \ 21 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG) 22 22 SETUPHDIR = \ 23 23 $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG) 24 24 EXCEPT_CXXFLAGS = $(__DEBUGINFO) $(__OPTIMIZEFLAG_2) $(__THREADSFLAG) \ 25 $(GCCFLAGS) -DHAVE_W32API_H -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ 25 $(GCCFLAGS) -DHAVE_W32API_H -D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ 26 26 $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ 27 27 $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \ 28 28 $(__MSLU_DEFINE_p) -I$(SETUPHDIR) -I.\..\..\include \ 29 29 $(____CAIRO_INCLUDEDIR_FILENAMES_p) -W -Wall -I. $(__DLLFLAG_p) \ 30 30 -I.\..\..\samples -DNOPCH $(__RTTIFLAG_5) $(__EXCEPTIONSFLAG_6) \ 31 -Wno-ctor-dtor-privacy $(CXXFLAGS_GTK_WINDOWS_GCC) $(CPPFLAGS) $(CXXFLAGS) 31 -Wno-ctor-dtor-privacy $(CXXFLAGS_GTK_WINDOWS_GCC) $(CPPFLAGS) $(CXXFLAGS) 32 32 EXCEPT_OBJECTS = \ 33 33 $(OBJS)\except_sample_rc.o \ 34 $(OBJS)\except_except.o 34 $(OBJS)\except_except.o \ 35 $(OBJS)\except_except_utf8.o 35 36 36 37 ### Conditionally set variables: ### 37 38 38 ifeq ($(TOOLKIT),GTK) 39 WIN32_TOOLKIT_LOWERCASE = gtk 40 endif 41 ifeq ($(TOOLKIT),MSW) 42 WIN32_TOOLKIT_LOWERCASE = msw 43 endif 39 ifeq ($(TOOLKIT),GTK) 40 WIN32_TOOLKIT_LOWERCASE = gtk 41 endif 42 ifeq ($(TOOLKIT),MSW) 43 WIN32_TOOLKIT_LOWERCASE = msw 44 endif 44 45 ifeq ($(GCC_VERSION),2.95) 45 46 GCCFLAGS = -fvtable-thunks 46 47 endif … … 48 49 PORTNAME = base 49 50 endif 50 51 ifeq ($(USE_GUI),1) 51 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 52 endif 53 ifeq ($(TOOLKIT),MAC) 54 WXBASEPORT = _carbon 55 endif 56 ifeq ($(OFFICIAL_BUILD),1) 57 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 52 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 58 53 endif 54 ifeq ($(TOOLKIT),MAC) 55 WXBASEPORT = _carbon 56 endif 57 ifeq ($(OFFICIAL_BUILD),1) 58 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 59 endif 59 60 ifeq ($(BUILD),debug) 60 61 WXDEBUGFLAG = d 61 62 endif … … 80 81 ifeq ($(MONOLITHIC),1) 81 82 EXTRALIBS_FOR_BASE = 82 83 endif 83 ifeq ($(TOOLKIT),GTK) 84 CXXFLAGS_GTK_WINDOWS_GCC = -mms-bitfields 85 endif 86 ifeq ($(TOOLKIT),GTK) 87 ifeq ($(TOOLKIT_VERSION),2) 88 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib \ 89 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib \ 90 glib-2.0.lib 91 endif 92 endif 84 ifeq ($(TOOLKIT),GTK) 85 CXXFLAGS_GTK_WINDOWS_GCC = -mms-bitfields 86 endif 87 ifeq ($(TOOLKIT),GTK) 88 ifeq ($(TOOLKIT_VERSION),2) 89 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib \ 90 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib \ 91 glib-2.0.lib 92 endif 93 endif 93 94 ifeq ($(BUILD),debug) 94 95 __OPTIMIZEFLAG_2 = -O0 95 96 endif … … 180 181 endif 181 182 ifeq ($(MONOLITHIC),0) 182 183 __WXLIB_BASE_p = \ 183 -lwxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR) 184 -lwxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR) 184 185 endif 185 186 ifeq ($(MONOLITHIC),1) 186 187 __WXLIB_MONO_p = \ … … 242 243 -if exist $(OBJS)\except.exe del $(OBJS)\except.exe 243 244 244 245 $(OBJS)\except.exe: $(EXCEPT_OBJECTS) $(OBJS)\except_sample_rc.o 245 $(CXX) -o $@ $(EXCEPT_OBJECTS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lwininet 246 $(CXX) -o $@ $(EXCEPT_OBJECTS) $(__DEBUGINFO) $(__THREADSFLAG) -L$(LIBDIRNAME) -Wl,--subsystem,windows -mwindows $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) -lwxzlib$(WXDEBUGFLAG) -lwxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG) -lwxexpat$(WXDEBUGFLAG) $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__CAIRO_LIB_p) -lkernel32 -luser32 -lgdi32 -lcomdlg32 -lwinspool -lwinmm -lshell32 -lcomctl32 -lole32 -loleaut32 -luuid -lrpcrt4 -ladvapi32 -lwsock32 -lwininet 246 247 247 248 $(OBJS)\except_sample_rc.o: ./../../samples/sample.rc 248 windres --use-temp-file -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) --include-dir $(SETUPHDIR) --include-dir ./../../include $(__CAIRO_INCLUDEDIR_p) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../samples --define NOPCH 249 windres --use-temp-file -i$< -o$@ --define __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) --include-dir $(SETUPHDIR) --include-dir ./../../include $(__CAIRO_INCLUDEDIR_p) --include-dir . $(__DLLFLAG_p_1) --include-dir ./../../samples --define NOPCH 249 250 250 251 $(OBJS)\except_except.o: ./except.cpp 251 252 $(CXX) -c -o $@ $(EXCEPT_CXXFLAGS) $(CPPDEPS) $< 252 253 254 $(OBJS)\except_except_utf8.o: ./except_utf8.cpp 255 $(CXX) -c -o $@ $(EXCEPT_CXXFLAGS) $(CPPDEPS) $< 256 253 257 .PHONY: all clean 254 258 255 259 -
samples/except/Makefile.in
50 50 EXCEPT_OBJECTS = \ 51 51 $(__except___win32rc) \ 52 52 $(__except_os2_lib_res) \ 53 except_except.o 53 except_except.o \ 54 except_except_utf8.o 54 55 55 56 ### Conditionally set variables: ### 56 57 … … 182 183 except_except.o: $(srcdir)/except.cpp 183 184 $(CXXC) -c -o $@ $(EXCEPT_CXXFLAGS) $(srcdir)/except.cpp 184 185 186 except_except_utf8.o: $(srcdir)/except_utf8.cpp 187 $(CXXC) -c -o $@ $(EXCEPT_CXXFLAGS) $(srcdir)/except_utf8.cpp 185 188 189 186 190 # Include dependency info, if present: 187 191 @IF_GNU_MAKE@-include ./.deps/*.d 188 192 -
samples/except/makefile.unx
53 53 EXCEPT_CXXFLAGS = -I. `$(WX_CONFIG) --cxxflags $(WX_CONFIG_FLAGS)` $(CPPFLAGS) \ 54 54 $(CXXFLAGS) 55 55 EXCEPT_OBJECTS = \ 56 except_except.o 56 except_except.o \ 57 except_except_utf8.o 57 58 58 59 ### Conditionally set variables: ### 59 60 … … 93 94 except_except.o: ./except.cpp 94 95 $(CXX) -c -o $@ $(EXCEPT_CXXFLAGS) $(CPPDEPS) $< 95 96 97 except_except_utf8.o: ./except_utf8.cpp 98 $(CXX) -c -o $@ $(EXCEPT_CXXFLAGS) $(CPPDEPS) $< 99 96 100 .PHONY: all install uninstall clean 97 101 98 102 -
samples/except/makefile.vc
15 15 WX_RELEASE_NODOT = 29 16 16 COMPILER_PREFIX = vc 17 17 OBJS = \ 18 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)$(ARCH_SUFFIX) 18 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG)$(ARCH_SUFFIX) 19 19 LIBDIRNAME = \ 20 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)$(ARCH_SUFFIX)_$(LIBTYPE_SUFFIX)$(CFG) 20 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)$(ARCH_SUFFIX)_$(LIBTYPE_SUFFIX)$(CFG) 21 21 SETUPHDIR = \ 22 22 $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG) 23 23 EXCEPT_CXXFLAGS = /M$(__RUNTIME_LIBS_10)$(__DEBUGRUNTIME_4) /DWIN32 \ 24 24 $(__DEBUGINFO_0) /Fd$(OBJS)\except.pdb $(____DEBUGRUNTIME_3_p) \ 25 25 $(__OPTIMIZEFLAG_6) /D_CRT_SECURE_NO_DEPRECATE=1 \ 26 26 /D_CRT_NON_CONFORMING_SWPRINTFS=1 /D_SCL_SECURE_NO_WARNINGS=1 \ 27 $(__NO_VC_CRTDBG_p) /D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ 28 $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ 29 $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \ 30 $(__MSLU_DEFINE_p) /I$(SETUPHDIR) /I.\..\..\include \ 31 $(____CAIRO_INCLUDEDIR_FILENAMES_p) /W4 /I. $(__DLLFLAG_p) /D_WINDOWS \ 32 /I.\..\..\samples /DNOPCH $(__RTTIFLAG_11) $(__EXCEPTIONSFLAG_12) \ 33 $(CPPFLAGS) $(CXXFLAGS) 27 $(__NO_VC_CRTDBG_p) /D__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) \ 28 $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) \ 29 $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) \ 30 $(__MSLU_DEFINE_p) /I$(SETUPHDIR) /I.\..\..\include \ 31 $(____CAIRO_INCLUDEDIR_FILENAMES_p) /W4 /I. $(__DLLFLAG_p) /D_WINDOWS \ 32 /I.\..\..\samples /DNOPCH $(__RTTIFLAG_11) $(__EXCEPTIONSFLAG_12) \ 33 $(CPPFLAGS) $(CXXFLAGS) 34 34 EXCEPT_OBJECTS = \ 35 $(OBJS)\except_except.obj 35 $(OBJS)\except_except.obj \ 36 $(OBJS)\except_except_utf8.obj 36 37 EXCEPT_RESOURCES = \ 37 38 $(OBJS)\except_sample.res 38 39 39 40 ### Conditionally set variables: ### 40 41 41 !if "$(TOOLKIT)" == "GTK" 42 WIN32_TOOLKIT_LOWERCASE = gtk 43 !endif 44 !if "$(TOOLKIT)" == "MSW" 45 WIN32_TOOLKIT_LOWERCASE = msw 46 !endif 47 !if "$(TARGET_CPU)" == "AMD64" 48 ARCH_SUFFIX = _x64 49 !endif 50 !if "$(TARGET_CPU)" == "IA64" 51 ARCH_SUFFIX = _ia64 52 !endif 53 !if "$(TARGET_CPU)" == "X64" 54 ARCH_SUFFIX = _x64 55 !endif 56 !if "$(TARGET_CPU)" == "amd64" 57 ARCH_SUFFIX = _x64 58 !endif 59 !if "$(TARGET_CPU)" == "ia64" 60 ARCH_SUFFIX = _ia64 61 !endif 62 !if "$(TARGET_CPU)" == "x64" 63 ARCH_SUFFIX = _x64 64 !endif 42 !if "$(TOOLKIT)" == "GTK" 43 WIN32_TOOLKIT_LOWERCASE = gtk 44 !endif 45 !if "$(TOOLKIT)" == "MSW" 46 WIN32_TOOLKIT_LOWERCASE = msw 47 !endif 48 !if "$(TARGET_CPU)" == "AMD64" 49 ARCH_SUFFIX = _x64 50 !endif 51 !if "$(TARGET_CPU)" == "IA64" 52 ARCH_SUFFIX = _ia64 53 !endif 54 !if "$(TARGET_CPU)" == "X64" 55 ARCH_SUFFIX = _x64 56 !endif 57 !if "$(TARGET_CPU)" == "amd64" 58 ARCH_SUFFIX = _x64 59 !endif 60 !if "$(TARGET_CPU)" == "ia64" 61 ARCH_SUFFIX = _ia64 62 !endif 63 !if "$(TARGET_CPU)" == "x64" 64 ARCH_SUFFIX = _x64 65 !endif 65 66 !if "$(USE_GUI)" == "0" 66 67 PORTNAME = base 67 68 !endif 68 69 !if "$(USE_GUI)" == "1" 69 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 70 !endif 71 !if "$(TOOLKIT)" == "MAC" 72 WXBASEPORT = _carbon 73 !endif 74 !if "$(OFFICIAL_BUILD)" == "1" 75 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 70 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 76 71 !endif 72 !if "$(TOOLKIT)" == "MAC" 73 WXBASEPORT = _carbon 74 !endif 75 !if "$(OFFICIAL_BUILD)" == "1" 76 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 77 !endif 77 78 !if "$(BUILD)" == "debug" && "$(DEBUG_RUNTIME_LIBS)" == "default" 78 79 WXDEBUGFLAG = d 79 80 !endif … … 101 102 !if "$(TARGET_CPU)" == "IA64" 102 103 LINK_TARGET_CPU = /MACHINE:IA64 103 104 !endif 104 !if "$(TARGET_CPU)" == "X64" 105 LINK_TARGET_CPU = /MACHINE:X64 106 !endif 105 !if "$(TARGET_CPU)" == "X64" 106 LINK_TARGET_CPU = /MACHINE:X64 107 !endif 107 108 !if "$(TARGET_CPU)" == "amd64" 108 109 LINK_TARGET_CPU = /MACHINE:X64 109 110 !endif 110 111 !if "$(TARGET_CPU)" == "ia64" 111 112 LINK_TARGET_CPU = /MACHINE:IA64 112 113 !endif 113 !if "$(TARGET_CPU)" == "x64" 114 LINK_TARGET_CPU = /MACHINE:X64 115 !endif 114 !if "$(TARGET_CPU)" == "x64" 115 LINK_TARGET_CPU = /MACHINE:X64 116 !endif 116 117 !if "$(MONOLITHIC)" == "0" 117 118 EXTRALIBS_FOR_BASE = 118 119 !endif 119 120 !if "$(MONOLITHIC)" == "1" 120 121 EXTRALIBS_FOR_BASE = 121 122 !endif 122 !if "$(TOOLKIT)" == "GTK" && "$(TOOLKIT_VERSION)" == "2" 123 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib \ 124 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib \ 125 glib-2.0.lib 126 !endif 123 !if "$(TOOLKIT)" == "GTK" && "$(TOOLKIT_VERSION)" == "2" 124 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib \ 125 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib \ 126 glib-2.0.lib 127 !endif 127 128 !if "$(BUILD)" == "debug" && "$(DEBUG_INFO)" == "default" 128 129 __DEBUGINFO_0 = /Zi 129 130 !endif … … 328 329 !endif 329 330 !if "$(MONOLITHIC)" == "0" 330 331 __WXLIB_BASE_p = \ 331 wxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib 332 wxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib 332 333 !endif 333 334 !if "$(MONOLITHIC)" == "1" 334 335 __WXLIB_MONO_p = \ … … 372 373 373 374 $(OBJS)\except.exe: $(EXCEPT_OBJECTS) $(OBJS)\except_sample.res 374 375 link /NOLOGO /OUT:$@ $(__DEBUGINFO_1) /pdb:"$(OBJS)\except.pdb" $(__DEBUGINFO_2) $(LINK_TARGET_CPU) /LIBPATH:$(LIBDIRNAME) /SUBSYSTEM:WINDOWS $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) @<< 375 $(EXCEPT_OBJECTS) $(EXCEPT_RESOURCES) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib wininet.lib 376 $(EXCEPT_OBJECTS) $(EXCEPT_RESOURCES) $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__UNICOWS_LIB_p) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib wininet.lib 376 377 << 377 378 378 379 $(OBJS)\except_sample.res: .\..\..\samples\sample.rc 379 rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_3_p_1) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_1) /d __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) /i $(SETUPHDIR) /i .\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\samples /d NOPCH .\..\..\samples\sample.rc 380 rc /fo$@ /d WIN32 $(____DEBUGRUNTIME_3_p_1) /d _CRT_SECURE_NO_DEPRECATE=1 /d _CRT_NON_CONFORMING_SWPRINTFS=1 /d _SCL_SECURE_NO_WARNINGS=1 $(__NO_VC_CRTDBG_p_1) /d __WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p_1) $(__DEBUG_DEFINE_p_1) $(__NDEBUG_DEFINE_p_1) $(__EXCEPTIONS_DEFINE_p_1) $(__RTTI_DEFINE_p_1) $(__THREAD_DEFINE_p_1) $(__UNICODE_DEFINE_p_1) $(__MSLU_DEFINE_p_1) /i $(SETUPHDIR) /i .\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES_1_p) /i . $(__DLLFLAG_p_1) /d _WINDOWS /i .\..\..\samples /d NOPCH .\..\..\samples\sample.rc 380 381 381 382 $(OBJS)\except_except.obj: .\except.cpp 382 383 $(CXX) /c /nologo /TP /Fo$@ $(EXCEPT_CXXFLAGS) .\except.cpp 383 384 385 $(OBJS)\except_except_utf8.obj: .\except_utf8.cpp 386 $(CXX) /c /nologo /TP /Fo$@ $(EXCEPT_CXXFLAGS) .\except_utf8.cpp 387 -
samples/except/makefile.wat
31 31 32 32 ### Conditionally set variables: ### 33 33 34 WIN32_TOOLKIT_LOWERCASE = 35 !ifeq TOOLKIT GTK 36 WIN32_TOOLKIT_LOWERCASE = gtk 37 !endif 38 !ifeq TOOLKIT MSW 39 WIN32_TOOLKIT_LOWERCASE = msw 40 !endif 34 WIN32_TOOLKIT_LOWERCASE = 35 !ifeq TOOLKIT GTK 36 WIN32_TOOLKIT_LOWERCASE = gtk 37 !endif 38 !ifeq TOOLKIT MSW 39 WIN32_TOOLKIT_LOWERCASE = msw 40 !endif 41 41 PORTNAME = 42 42 !ifeq USE_GUI 0 43 43 PORTNAME = base 44 44 !endif 45 45 !ifeq USE_GUI 1 46 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 47 !endif 48 WXBASEPORT = 49 !ifeq TOOLKIT MAC 50 WXBASEPORT = _carbon 51 !endif 52 COMPILER_VERSION = 53 !ifeq OFFICIAL_BUILD 1 54 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 46 PORTNAME = $(WIN32_TOOLKIT_LOWERCASE)$(TOOLKIT_VERSION) 55 47 !endif 48 WXBASEPORT = 49 !ifeq TOOLKIT MAC 50 WXBASEPORT = _carbon 51 !endif 52 COMPILER_VERSION = 53 !ifeq OFFICIAL_BUILD 1 54 COMPILER_VERSION = ERROR-COMPILER-VERSION-MUST-BE-SET-FOR-OFFICIAL-BUILD 55 !endif 56 56 WXDEBUGFLAG = 57 57 !ifeq BUILD debug 58 58 WXDEBUGFLAG = d … … 83 83 !ifeq MONOLITHIC 1 84 84 EXTRALIBS_FOR_BASE = 85 85 !endif 86 LIB_GTK = 87 !ifeq TOOLKIT GTK 88 !ifeq TOOLKIT_VERSION 2 89 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib & 90 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib & 91 glib-2.0.lib 92 !endif 93 !endif 86 LIB_GTK = 87 !ifeq TOOLKIT GTK 88 !ifeq TOOLKIT_VERSION 2 89 LIB_GTK = gtk-win32-2.0.lib gdk-win32-2.0.lib pangocairo-1.0.lib & 90 gdk_pixbuf-2.0.lib cairo.lib pango-1.0.lib gobject-2.0.lib gthread-2.0.lib & 91 glib-2.0.lib 92 !endif 93 !endif 94 94 __DEBUGINFO_0 = 95 95 !ifeq BUILD debug 96 96 !ifeq DEBUG_INFO default … … 168 168 __WXLIB_BASE_p = 169 169 !ifeq MONOLITHIC 0 170 170 __WXLIB_BASE_p = & 171 wxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib 171 wxbase$(WXBASEPORT)$(WX_RELEASE_NODOT)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WX_LIB_FLAVOUR).lib 172 172 !endif 173 173 __WXLIB_MONO_p = 174 174 !ifeq MONOLITHIC 1 … … 240 240 WX_RELEASE_NODOT = 29 241 241 COMPILER_PREFIX = wat 242 242 OBJS = & 243 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG) 244 LIBDIRNAME = & 245 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG) 243 $(COMPILER_PREFIX)$(COMPILER_VERSION)_$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG)$(WXDLLFLAG)$(CFG) 244 LIBDIRNAME = & 245 .\..\..\lib\$(COMPILER_PREFIX)$(COMPILER_VERSION)_$(LIBTYPE_SUFFIX)$(CFG) 246 246 SETUPHDIR = & 247 247 $(LIBDIRNAME)\$(PORTNAME)$(WXUNIVNAME)$(WXUNICODEFLAG)$(WXDEBUGFLAG) 248 248 EXCEPT_CXXFLAGS = $(__DEBUGINFO_0) $(__OPTIMIZEFLAG_2) $(__THREADSFLAG_5) & 249 $(__RUNTIME_LIBS_6) -d__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) & 250 $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) & 251 $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) & 252 -i=$(SETUPHDIR) -i=.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) -wx & 253 -wcd=549 -wcd=656 -wcd=657 -wcd=667 -i=. $(__DLLFLAG_p) -i=.\..\..\samples & 254 -dNOPCH $(__RTTIFLAG_7) $(__EXCEPTIONSFLAG_8) $(CPPFLAGS) $(CXXFLAGS) 249 $(__RUNTIME_LIBS_6) -d__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) & 250 $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) & 251 $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) & 252 -i=$(SETUPHDIR) -i=.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) -wx & 253 -wcd=549 -wcd=656 -wcd=657 -wcd=667 -i=. $(__DLLFLAG_p) -i=.\..\..\samples & 254 -dNOPCH $(__RTTIFLAG_7) $(__EXCEPTIONSFLAG_8) $(CPPFLAGS) $(CXXFLAGS) 255 255 EXCEPT_OBJECTS = & 256 $(OBJS)\except_except.obj 256 $(OBJS)\except_except.obj & 257 $(OBJS)\except_except_utf8.obj 257 258 258 259 259 260 all : $(OBJS) … … 279 280 @%append $(OBJS)\except.lbc option caseexact 280 281 @%append $(OBJS)\except.lbc $(__DEBUGINFO_1) libpath $(LIBDIRNAME) system nt_win ref '_WinMain@16' $(____CAIRO_LIBDIR_FILENAMES_p) $(LDFLAGS) 281 282 @for %i in ($(EXCEPT_OBJECTS)) do @%append $(OBJS)\except.lbc file %i 282 @for %i in ( $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib wininet.lib) do @%append $(OBJS)\except.lbc library %i 283 @for %i in ( $(__WXLIB_CORE_p) $(__WXLIB_BASE_p) $(__WXLIB_MONO_p) $(__LIB_TIFF_p) $(__LIB_JPEG_p) $(__LIB_PNG_p) $(LIB_GTK) wxzlib$(WXDEBUGFLAG).lib wxregex$(WXUNICODEFLAG)$(WXDEBUGFLAG).lib wxexpat$(WXDEBUGFLAG).lib $(EXTRALIBS_FOR_BASE) $(__CAIRO_LIB_p) kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib wininet.lib) do @%append $(OBJS)\except.lbc library %i 283 284 @%append $(OBJS)\except.lbc option resource=$(OBJS)\except_sample.res 284 285 @for %i in () do @%append $(OBJS)\except.lbc option stack=%i 285 286 wlink @$(OBJS)\except.lbc 286 287 287 288 $(OBJS)\except_sample.res : .AUTODEPEND .\..\..\samples\sample.rc 288 wrc -q -ad -bt=nt -r -fo=$^@ -d__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) -i=$(SETUPHDIR) -i=.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) -i=. $(__DLLFLAG_p) -i=.\..\..\samples -dNOPCH $< 289 wrc -q -ad -bt=nt -r -fo=$^@ -d__WX$(TOOLKIT)__ $(__WXUNIV_DEFINE_p) $(__DEBUG_DEFINE_p) $(__NDEBUG_DEFINE_p) $(__EXCEPTIONS_DEFINE_p) $(__RTTI_DEFINE_p) $(__THREAD_DEFINE_p) $(__UNICODE_DEFINE_p) -i=$(SETUPHDIR) -i=.\..\..\include $(____CAIRO_INCLUDEDIR_FILENAMES) -i=. $(__DLLFLAG_p) -i=.\..\..\samples -dNOPCH $< 289 290 290 291 $(OBJS)\except_except.obj : .AUTODEPEND .\except.cpp 291 292 $(CXX) -bt=nt -zq -fo=$^@ $(EXCEPT_CXXFLAGS) $< 292 293 294 $(OBJS)\except_except_utf8.obj : .AUTODEPEND .\except_utf8.cpp 295 $(CXX) -bt=nt -zq -fo=$^@ $(EXCEPT_CXXFLAGS) $< 296 -
src/msw/debughlp.cpp
2 2 // Name: src/msw/debughlp.cpp 3 3 // Purpose: various Win32 debug helpers 4 4 // Author: Vadim Zeitlin 5 // Modified by: 5 // Modified by: Suzumizaki-kimitaka 2013-04-10 6 6 // Created: 2005-01-08 (extracted from crashrpt.cpp) 7 7 // RCS-ID: $Id$ 8 8 // Copyright: (c) 2003-2005 Vadim Zeitlin <vadim@wxwindows.org> … … 63 63 64 64 // load all function we need from the DLL 65 65 66 static bool BindDbgHelpFunctions(const wxDynamicLibrary& dllDbgHelp) 66 /* static */ 67 bool wxDbgHelpDLL::BindDbgHelpFunctions(const wxDynamicLibrary& dllDbgHelp) 67 68 { 68 69 #define LOAD_SYM_FUNCTION(func, name) \ 69 70 wxDbgHelpDLL::func = (wxDbgHelpDLL::func ## _t) \ … … 74 75 return false; \ 75 76 } 76 77 77 wxDO_FOR_ALL_SYM_FUNCS (LOAD_SYM_FUNCTION);78 wxDO_FOR_ALL_SYM_FUNCS_REQUIRED(LOAD_SYM_FUNCTION); 78 79 79 80 #undef LOAD_SYM_FUNCTION 80 81 82 #define LOAD_SYM_FUNCTION_OPTIONAL(func, name) \ 83 if ( dllDbgHelp.HasSymbol(wxT(#name)) ) \ 84 { \ 85 wxDbgHelpDLL::func = (wxDbgHelpDLL::func ## _t) \ 86 dllDbgHelp.GetSymbol(wxT(#name)); \ 87 } 88 89 wxDO_FOR_ALL_SYM_FUNCS_OPTIONAL(LOAD_SYM_FUNCTION_OPTIONAL); 90 91 #undef LOAD_SYM_FUNCTION_CAN_FAIL 92 81 93 return true; 82 94 } 83 95 84 96 // called by Init() if we hadn't done this before 85 static bool DoInit() 97 /* static */ 98 bool wxDbgHelpDLL::DoInit() 86 99 { 87 100 wxDynamicLibrary dllDbgHelp(wxT("dbghelp.dll"), wxDL_VERBATIM); 88 101 if ( dllDbgHelp.IsLoaded() ) … … 171 184 172 185 static inline 173 186 bool 174 DoGetTypeInfo( PSYMBOL_INFO pSym, IMAGEHLP_SYMBOL_TYPE_INFO type, void *rc)187 DoGetTypeInfo(wxPSYMBOL_INFO pSym, IMAGEHLP_SYMBOL_TYPE_INFO type, void *rc) 175 188 { 176 189 return DoGetTypeInfo(pSym->ModBase, pSym->TypeIndex, type, rc); 177 190 } 178 191 179 192 static inline 180 wxDbgHelpDLL::BasicType GetBasicType( PSYMBOL_INFO pSym)193 wxDbgHelpDLL::BasicType GetBasicType(wxPSYMBOL_INFO pSym) 181 194 { 182 195 wxDbgHelpDLL::BasicType bt; 183 196 return DoGetTypeInfo(pSym, TI_GET_BASETYPE, &bt) … … 186 199 } 187 200 188 201 /* static */ 189 wxString wxDbgHelpDLL::GetSymbolName( PSYMBOL_INFO pSym)202 wxString wxDbgHelpDLL::GetSymbolName(wxPSYMBOL_INFO pSym) 190 203 { 191 204 wxString s; 192 205 … … 290 303 } 291 304 292 305 wxString 293 wxDbgHelpDLL::DumpField( PSYMBOL_INFO pSym, void *pVariable, unsigned level)306 wxDbgHelpDLL::DumpField(wxPSYMBOL_INFO pSym, void *pVariable, unsigned level) 294 307 { 295 308 wxString s; 296 309 … … 337 350 338 351 339 352 // now pass to the type representing the type of this member 340 SYMBOL_INFO sym = *pSym;353 wxSYMBOL_INFO sym = *pSym; 341 354 if ( !DoGetTypeInfo(pSym, TI_GET_TYPEID, &sym.TypeIndex) ) 342 355 break; 343 356 … … 388 401 } 389 402 390 403 /* static */ wxString 391 wxDbgHelpDLL::DumpUDT( PSYMBOL_INFO pSym, void *pVariable, unsigned level)404 wxDbgHelpDLL::DumpUDT(wxPSYMBOL_INFO pSym, void *pVariable, unsigned level) 392 405 { 393 406 wxString s; 394 407 … … 455 468 s << wxT(" {\n"); 456 469 457 470 // Iterate through all children 458 SYMBOL_INFO sym;471 wxSYMBOL_INFO sym; 459 472 wxZeroMemory(sym); 460 473 sym.ModBase = pSym->ModBase; 461 474 for ( unsigned i = 0; i < dwChildrenCount; i++ ) … … 487 500 488 501 /* static */ 489 502 wxDbgHelpDLL::SymbolTag 490 wxDbgHelpDLL::DereferenceSymbol( PSYMBOL_INFO pSym, void **ppData)503 wxDbgHelpDLL::DereferenceSymbol(wxPSYMBOL_INFO pSym, void **ppData) 491 504 { 492 505 SymbolTag tag = SYMBOL_TAG_NULL; 493 506 for ( ;; ) … … 524 537 } 525 538 526 539 /* static */ wxString 527 wxDbgHelpDLL::DumpSymbol( PSYMBOL_INFO pSym, void *pVariable)540 wxDbgHelpDLL::DumpSymbol(wxPSYMBOL_INFO pSym, void *pVariable) 528 541 { 529 542 wxString s; 530 SYMBOL_INFO symDeref = *pSym;543 wxSYMBOL_INFO symDeref = *pSym; 531 544 switch ( DereferenceSymbol(&symDeref, &pVariable) ) 532 545 { 533 546 default: … … 554 567 } 555 568 556 569 // ---------------------------------------------------------------------------- 570 // do the best functions and structures 571 // ---------------------------------------------------------------------------- 572 573 struct wxMswEnmLddMdlsHelperStruct 574 { 575 public: 576 wxMswEnmLddMdlsHelperStruct(wxPENUMLOADED_MODULES_CALLBACK64 ptr, PVOID content) 577 : m_pointer_to_callback(ptr), m_user_content(content) 578 { } 579 wxPENUMLOADED_MODULES_CALLBACK64 m_pointer_to_callback; 580 PVOID m_user_content; 581 }; 582 583 #ifdef UNICODE 584 585 static BOOL CALLBACK wxMswEnmLddMdlsCallback1( 586 PCSTR ModuleName, DWORD64 ModuleBase, ULONG ModuleSize, PVOID UserContext) 587 { 588 wxMswEnmLddMdlsHelperStruct& alternate = 589 *(wxMswEnmLddMdlsHelperStruct*)(UserContext); 590 591 const wxWCharBuffer buf = wxConvLocal.cMB2WC(ModuleName, wxNO_LEN, NULL); 592 return (*alternate.m_pointer_to_callback) 593 (buf.data(), ModuleBase, ModuleSize, alternate.m_user_content); 594 } 595 596 static BOOL CALLBACK wxMswEnmLddMdlsCallback2( 597 PCSTR ModuleName, DWORD_PTR ModuleBase, ULONG ModuleSize, PVOID UserContext) 598 { 599 wxMswEnmLddMdlsHelperStruct& alternate = 600 *(wxMswEnmLddMdlsHelperStruct*)(UserContext); 601 602 const wxWCharBuffer buf = wxConvLocal.cMB2WC(ModuleName, wxNO_LEN, NULL); 603 return (*alternate.m_pointer_to_callback) 604 (buf.data(), ModuleBase, ModuleSize, alternate.m_user_content); 605 } 606 607 #else 608 609 static BOOL CALLBACK wxMswEnmLddMdlsCallback( 610 PCSTR ModuleName, DWORD_PTR ModuleBase, ULONG ModuleSize, PVOID UserContext) 611 { 612 wxMswEnmLddMdlsHelperStruct& alternate = 613 *(wxMswEnmLddMdlsHelperStruct*)(UserContext); 614 615 return (*alternate.m_pointer_to_callback) 616 (ModuleName, ModuleBase, ModuleSize, alternate.m_user_content); 617 } 618 619 #endif // UNICODE 620 621 /* static */ 622 BOOL wxDbgHelpDLL::EnumerateLoadedModulesT( 623 HANDLE handle, wxPENUMLOADED_MODULES_CALLBACK64 callback, PVOID pvoid) 624 { 625 #ifdef UNICODE 626 if (EnumerateLoadedModulesW64) 627 { 628 const BOOL retVal = (*EnumerateLoadedModulesW64)(handle, callback, pvoid); 629 if (retVal) 630 return retVal; 631 } 632 if (EnumerateLoadedModules64) 633 { 634 wxMswEnmLddMdlsHelperStruct p(callback, pvoid); 635 const BOOL retVal = 636 (*EnumerateLoadedModules64) 637 (handle, &wxMswEnmLddMdlsCallback1, (PVOID)(&p)); 638 if (retVal) 639 return retVal; 640 } 641 if (EnumerateLoadedModules) 642 { 643 wxMswEnmLddMdlsHelperStruct p(callback, pvoid); 644 const BOOL retVal = 645 (*EnumerateLoadedModules) 646 (handle, &wxMswEnmLddMdlsCallback2, (PVOID)(&p)); 647 if (retVal) 648 return retVal; 649 } 650 return FALSE; 651 #else 652 if (EnumerateLoadedModules64) 653 { 654 const BOOL retVal = (*EnumerateLoadedModules64)(handle, callback, pvoid); 655 if (retVal) 656 return retVal; 657 } 658 if (EnumerateLoadedModules) 659 { 660 wxMswEnmLddMdlsHelperStruct p(callback, pvoid); 661 const BOOL retVal = 662 (*EnumerateLoadedModules) 663 (handle, &wxMswEnmLddMdlsCallback, (PVOID)(&p)); 664 if (retVal) 665 return retVal; 666 } 667 return FALSE; 668 #endif 669 } 670 671 /* static */ 672 BOOL wxDbgHelpDLL::SymInitializeT(HANDLE hProcess, LPCTSTR UserSearchPath, BOOL fInvadeProcess) 673 { 674 #ifdef UNICODE 675 if (SymInitializeW) 676 { 677 const BOOL retVal = (*SymInitializeW)(hProcess, UserSearchPath, fInvadeProcess); 678 if (retVal) 679 return retVal; 680 } 681 if (SymInitialize) 682 { 683 BOOL retVal; 684 if (UserSearchPath) 685 { 686 const wxCharBuffer buf = wxConvLocal.cWC2MB(UserSearchPath, wxNO_LEN, NULL); 687 retVal = (*SymInitialize)(hProcess, buf.data(), fInvadeProcess); 688 } 689 else 690 { 691 retVal = (*SymInitialize)(hProcess, NULL, fInvadeProcess); 692 } 693 return retVal; 694 } 695 return FALSE; 696 #else 697 if (SymInitialize) 698 { 699 return (*SymInitialize)(hProcess, UserSearchPath, fInvadeProcess); 700 } 701 return FALSE; 702 #endif 703 } 704 705 /* static */ 706 BOOL wxDbgHelpDLL::SymFromAddrT(HANDLE hProcess, DWORD64 Address, PDWORD64 Displacement, wxPSYMBOL_INFO Symbol) 707 { 708 #ifdef UNICODE 709 if (SymFromAddrW) 710 { 711 const BOOL retVal = (*SymFromAddrW)(hProcess, Address, Displacement, Symbol); 712 if (retVal) 713 return retVal; 714 } 715 if (SymFromAddr) 716 { 717 wxScopedPtr<BYTE> symbolBuffer(new BYTE[sizeof(SYMBOL_INFO) + Symbol->MaxNameLen*sizeof(CHAR)]); 718 PSYMBOL_INFO data = (SYMBOL_INFO*)(symbolBuffer.get()); 719 wxZeroMemory(*data); 720 data->SizeOfStruct = sizeof(SYMBOL_INFO); 721 data->MaxNameLen = Symbol->MaxNameLen; 722 if (! (*SymFromAddr)(hProcess, Address, Displacement, data)) 723 { 724 return FALSE; 725 } 726 727 // We can't refer data->NameLen. It seems to be unmodified. 728 const wxWCharBuffer buf = wxConvLocal.cMB2WC(data->Name, wxNO_LEN, NULL); 729 730 Symbol->TypeIndex = data->TypeIndex; 731 Symbol->Reserved[0] = data->Reserved[0]; 732 Symbol->Reserved[1] = data->Reserved[1]; 733 Symbol->Index = data->Index; 734 Symbol->Size = data->Size; 735 Symbol->ModBase = data->ModBase; 736 Symbol->Flags = data->Flags; 737 Symbol->Value = data->Value; 738 Symbol->Address = data->Address; 739 Symbol->Register = data->Register; 740 Symbol->Scope = data->Scope; 741 Symbol->Tag = data->Tag; 742 Symbol->NameLen = buf.length(); 743 wxStrncpy(Symbol->Name, buf.data(), Symbol->MaxNameLen); 744 return TRUE; 745 } 746 return FALSE; 747 #else 748 if (SymFromAddr) 749 { 750 return (*SymFromAddr)(hProcess, Address, Displacement, Symbol); 751 } 752 return FALSE; 753 #endif 754 } 755 756 /* static */ 757 BOOL wxDbgHelpDLL::SymGetLineFromAddrT(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdrDisplacement, wxPIMAGEHLP_LINE Line) 758 { 759 #ifdef UNICODE 760 if (SymGetLineFromAddrW64) 761 { 762 const BOOL retVal = (*SymGetLineFromAddrW64)(hProcess, dwAddr, pdrDisplacement, Line); 763 if (retVal) 764 return retVal; 765 // TODO: seems always fail with GetLastError() returns 487 with 32bit binary on 64 bit Windows. 766 } 767 static WCHAR staticBuf[MAX_PATH]; 768 if (SymGetLineFromAddr64) 769 { 770 IMAGEHLP_LINE64 LineAlternate; 771 LineAlternate.SizeOfStruct = sizeof(IMAGEHLP_LINE64); 772 if ((*SymGetLineFromAddr64)(hProcess, dwAddr, pdrDisplacement, &LineAlternate)) 773 { 774 const wxWCharBuffer ConvBuf = 775 wxConvLocal.cMB2WC(LineAlternate.FileName, wxNO_LEN, NULL); 776 wxStrncpy(staticBuf, ConvBuf.data(), MAX_PATH); 777 Line->Key = LineAlternate.Key; 778 Line->LineNumber = LineAlternate.LineNumber; 779 Line->FileName = staticBuf; 780 Line->Address = LineAlternate.Address; 781 return TRUE; 782 } 783 } 784 if (SymGetLineFromAddr) 785 { 786 IMAGEHLP_LINE LineAlternate; 787 LineAlternate.SizeOfStruct = sizeof(IMAGEHLP_LINE); 788 if ((*SymGetLineFromAddr)(hProcess, dwAddr, pdrDisplacement, &LineAlternate)) 789 { 790 const wxWCharBuffer ConvBuf = 791 wxConvLocal.cMB2WC(LineAlternate.FileName, wxNO_LEN, NULL); 792 wxStrncpy(staticBuf, ConvBuf.data(), MAX_PATH); 793 Line->Key = LineAlternate.Key; 794 Line->LineNumber = LineAlternate.LineNumber; 795 Line->FileName = staticBuf; 796 Line->Address = LineAlternate.Address; 797 return TRUE; 798 } 799 } 800 return FALSE; 801 #else 802 if (SymGetLineFromAddr64) 803 { 804 return (*SymGetLineFromAddr64)(hProcess, dwAddr, pdrDisplacement, Line); 805 } 806 if (SymGetLineFromAddr) 807 { 808 IMAGEHLP_LINE LineAlternate; 809 LineAlternate.SizeOfStruct = sizeof(IMAGEHLP_LINE); 810 if ((*SymGetLineFromAddr)(hProcess, dwAddr, pdrDisplacement, &LineAlternate)) 811 { 812 Line->Key = LineAlternate.Key; 813 Line->LineNumber = LineAlternate.LineNumber; 814 Line->FileName = LineAlternate.FileName; 815 Line->Address = LineAlternate.Address; 816 return TRUE; 817 } 818 } 819 return FALSE; 820 #endif 821 } 822 823 struct wxMswSymEnumSymbolsHelperStruct 824 { 825 public: 826 wxMswSymEnumSymbolsHelperStruct(PSYM_ENUMERATESYMBOLS_CALLBACKW ptr, PVOID content) 827 : m_pointer_to_callback(ptr), m_user_content(content) 828 { } 829 PSYM_ENUMERATESYMBOLS_CALLBACKW m_pointer_to_callback; 830 PVOID m_user_content; 831 }; 832 833 #ifdef UNICODE 834 835 static BOOL CALLBACK wxMswSymEnumSymbolsHelperCallback( 836 PSYMBOL_INFO pSymInfo, ULONG SymbolSize, PVOID UserContext) 837 { 838 wxMswSymEnumSymbolsHelperStruct& alternate = 839 *(wxMswSymEnumSymbolsHelperStruct*)(UserContext); 840 const wxWCharBuffer buf = wxConvLocal.cMB2WC(pSymInfo->Name, pSymInfo->MaxNameLen, NULL); 841 wxScopedPtr<BYTE> symbolBuffer(new BYTE[sizeof(SYMBOL_INFOW) + buf.length()*sizeof(WCHAR)]); 842 SYMBOL_INFOW* data = (SYMBOL_INFOW*)(symbolBuffer.get()); 843 data->SizeOfStruct = sizeof(SYMBOL_INFOW); 844 data->TypeIndex = pSymInfo->TypeIndex; 845 data->Reserved[0] = pSymInfo->Reserved[0]; 846 data->Reserved[1] = pSymInfo->Reserved[1]; 847 data->Index = pSymInfo->Index; 848 data->Size = pSymInfo->Size; 849 data->ModBase = pSymInfo->ModBase; 850 data->Flags = pSymInfo->Flags; 851 data->Value = pSymInfo->Value; 852 data->Address = pSymInfo->Address; 853 data->Register = pSymInfo->Register; 854 data->Scope = pSymInfo->Scope; 855 data->Tag = pSymInfo->Tag; 856 data->NameLen = pSymInfo->NameLen; 857 data->MaxNameLen = pSymInfo->MaxNameLen; 858 wxStrncpy(data->Name, buf.data(), buf.length()); 859 BOOL retVal = (*alternate.m_pointer_to_callback)(data, SymbolSize, alternate.m_user_content); 860 return retVal; 861 } 862 863 #endif // UNICODE 864 865 /* static */ 866 BOOL wxDbgHelpDLL::SymEnumSymbolsT(HANDLE hProcess, ULONG64 baseOfDll, PCTSTR Mask, 867 wxPSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, const PVOID UserContext) 868 { 869 #ifdef UNICODE 870 if (SymEnumSymbolsW) 871 { 872 const BOOL retVal = (*SymEnumSymbolsW)(hProcess, baseOfDll, Mask, EnumSymbolsCallback, UserContext); 873 if (retVal) 874 return retVal; 875 } 876 if (SymEnumSymbols) 877 { 878 wxMswSymEnumSymbolsHelperStruct p(EnumSymbolsCallback, UserContext); 879 const wxCharBuffer buf = wxConvLocal.cWC2MB(Mask ? Mask : L"", wxNO_LEN, NULL); 880 return (*SymEnumSymbols)(hProcess, baseOfDll, buf.data(), 881 wxMswSymEnumSymbolsHelperCallback, (PVOID)(&p)); 882 } 883 return FALSE; 884 #else 885 if (SymEnumSymbols) 886 { 887 return (*SymEnumSymbols)(hProcess, baseOfDll, Mask, EnumSymbolsCallback, UserContext); 888 } 889 return FALSE; 890 #endif 891 } 892 893 // ---------------------------------------------------------------------------- 557 894 // debugging helpers 558 895 // ---------------------------------------------------------------------------- 559 896 … … 780 1117 #endif // NDEBUG 781 1118 782 1119 #endif // wxUSE_DBGHELP 1120 -
src/msw/dlmsw.cpp
2 2 // Name: src/msw/dlmsw.cpp 3 3 // Purpose: Win32-specific part of wxDynamicLibrary and related classes 4 4 // Author: Vadim Zeitlin 5 // Modified by: 5 // Modified by: Suzumizaki-kimitaka 2013-04-09 6 6 // Created: 2005-01-10 (partly extracted from common/dynlib.cpp) 7 7 // RCS-ID: $Id$ 8 8 // Copyright: (c) 1998-2005 Vadim Zeitlin <vadim@wxwindows.org> … … 80 80 wxVersionDLL *verDLL; 81 81 }; 82 82 83 // TODO: fix EnumerateLoadedModules() to use EnumerateLoadedModules64()84 #ifdef __WIN64__85 typedef DWORD64 DWORD_32_64;86 #else87 typedef DWORD DWORD_32_64;88 #endif89 90 83 static BOOL CALLBACK 91 EnumModulesProc(PC STR name, DWORD_32_64 base, ULONG size, void *data);84 EnumModulesProc(PCTSTR name, DWORD64 base, ULONG size, PVOID data); 92 85 }; 93 86 94 87 // ============================================================================ … … 116 109 #endif // UNICODE/ANSI 117 110 118 111 #define LOAD_VER_FUNCTION(name) \ 119 m_pfn ## name = (name ## _t)m_dll.GetSymbol(wxT(#name SUFFIX)); 112 m_pfn ## name = (name ## _t)m_dll.GetSymbol(wxT(#name SUFFIX)); \ 120 113 if ( !m_pfn ## name ) \ 121 114 { \ 122 115 m_dll.Unload(); \ … … 175 168 176 169 /* static */ 177 170 BOOL CALLBACK 178 wxDynamicLibraryDetailsCreator::EnumModulesProc(PC STR name,179 DWORD _32_64 base,171 wxDynamicLibraryDetailsCreator::EnumModulesProc(PCTSTR name, 172 DWORD64 base, 180 173 ULONG size, 181 void *data)174 PVOID data) 182 175 { 183 176 EnumModulesProcParams *params = (EnumModulesProcParams *)data; 184 177 185 178 wxDynamicLibraryDetails *details = new wxDynamicLibraryDetails; 186 179 187 180 // fill in simple properties 181 #ifdef UNICODE 188 182 details->m_name = name; 183 #else 184 details->m_name = wxString(name, wxConvLocal); 185 #endif 189 186 details->m_address = wxUIntToPtr(base); 190 187 details->m_length = size; 191 188 … … 323 320 params.dlls = &dlls; 324 321 params.verDLL = &verDLL; 325 322 326 // Note that the cast of EnumModulesProc is needed because the type of 327 // PENUMLOADED_MODULES_CALLBACK changed: in old SDK versions its first 328 // argument was non-const PSTR while now it's PCSTR. By explicitly 329 // casting to whatever the currently used headers require we ensure 330 // that the code compilers in any case. 331 if ( !wxDbgHelpDLL::EnumerateLoadedModules 323 if ( !wxDbgHelpDLL::EnumerateLoadedModulesT 332 324 ( 333 325 ::GetCurrentProcess(), 334 (PENUMLOADED_MODULES_CALLBACK)335 326 wxDynamicLibraryDetailsCreator::EnumModulesProc, 336 327 ¶ms 337 328 ) ) 338 329 { 339 wxLogLastError(wxT("EnumerateLoadedModules "));330 wxLogLastError(wxT("EnumerateLoadedModulesT")); 340 331 } 341 332 } 342 333 #endif // wxUSE_DBGHELP -
src/msw/stackwalk.cpp
2 2 // Name: src/msw/stackwalk.cpp 3 3 // Purpose: wxStackWalker implementation for Win32 4 4 // Author: Vadim Zeitlin 5 // Modified by: Artur Bac 2010-10-01 AMD64 Port 5 // Modified by: Artur Bac 2010-10-01 AMD64 Port, 6 // Suzumizaki-kimitaka 2013-04-09 6 7 // Created: 2005-01-08 7 8 // RCS-ID: $Id$ 8 9 // Copyright: (c) 2003-2005 Vadim Zeitlin <vadim@wxwindows.org> … … 52 53 53 54 // get the name of the function for this stack frame entry 54 55 static const size_t MAX_NAME_LEN = 1024; 55 BYTE symbolBuffer[sizeof( SYMBOL_INFO) + MAX_NAME_LEN];56 BYTE symbolBuffer[sizeof(wxSYMBOL_INFO) + MAX_NAME_LEN*sizeof(TCHAR)]; 56 57 wxZeroMemory(symbolBuffer); 57 58 58 PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)symbolBuffer;59 pSymbol->SizeOfStruct = sizeof( SYMBOL_INFO);59 wxPSYMBOL_INFO pSymbol = (wxPSYMBOL_INFO)symbolBuffer; 60 pSymbol->SizeOfStruct = sizeof(wxSYMBOL_INFO); 60 61 pSymbol->MaxNameLen = MAX_NAME_LEN; 61 62 62 63 DWORD64 symDisplacement = 0; 63 if ( !wxDbgHelpDLL::SymFromAddr 64 if ( !wxDbgHelpDLL::SymFromAddrT 64 65 ( 65 66 ::GetCurrentProcess(), 66 67 GetSymAddr(), … … 68 69 pSymbol 69 70 ) ) 70 71 { 71 wxDbgHelpDLL::LogError(wxT("SymFromAddr "));72 wxDbgHelpDLL::LogError(wxT("SymFromAddrT")); 72 73 return; 73 74 } 74 75 m_name = wxString::FromAscii(pSymbol->Name); 75 #ifdef UNICODE 76 m_name = pSymbol->Name; 77 #else 78 m_name = wxString(pSymbol->Name, wxConvLocal); 79 #endif 76 80 m_offset = symDisplacement; 77 81 } 78 82 … … 84 88 m_hasLocation = true; 85 89 86 90 // get the source line for this stack frame entry 87 IMAGEHLP_LINE lineInfo = { sizeof(IMAGEHLP_LINE) };91 wxIMAGEHLP_LINE lineInfo = { sizeof(wxIMAGEHLP_LINE) }; 88 92 DWORD dwLineDisplacement; 89 if ( !wxDbgHelpDLL::SymGetLineFromAddr 93 if ( !wxDbgHelpDLL::SymGetLineFromAddrT 90 94 ( 91 95 ::GetCurrentProcess(), 92 96 GetSymAddr(), … … 96 100 { 97 101 // it is normal that we don't have source info for some symbols, 98 102 // notably all the ones from the system DLLs... 99 //wxDbgHelpDLL::LogError(wxT("SymGetLineFromAddr "));103 //wxDbgHelpDLL::LogError(wxT("SymGetLineFromAddr64")); 100 104 return; 101 105 } 102 103 m_filename = wxString::FromAscii(lineInfo.FileName); 106 #ifdef UNICODE 107 m_filename = lineInfo.FileName; 108 #else 109 m_filename = wxString(lineInfo.FileName, wxConvLocal); 110 #endif 104 111 m_line = lineInfo.LineNumber; 105 112 } 106 113 … … 126 133 return true; 127 134 } 128 135 129 void wxStackFrame::OnParam( PSYMBOL_INFO pSymInfo)136 void wxStackFrame::OnParam(wxPSYMBOL_INFO pSymInfo) 130 137 { 131 138 m_paramTypes.Add(wxEmptyString); 132 139 133 m_paramNames.Add(wxString::FromAscii(pSymInfo->Name)); 140 #ifdef UNICODE 141 m_paramNames.Add(pSymInfo->Name); 142 #else 143 m_paramNames.Add(wxString(pSymInfo->Name, wxConvLocal)); 144 #endif 134 145 135 146 // if symbol information is corrupted and we crash, the exception is going 136 147 // to be ignored when we're called from WalkFromException() because of the … … 159 170 } 160 171 161 172 BOOL CALLBACK 162 EnumSymbolsProc( PSYMBOL_INFO pSymInfo, ULONG WXUNUSED(SymSize), PVOID data)173 EnumSymbolsProc(wxPSYMBOL_INFO pSymInfo, ULONG WXUNUSED(SymSize), PVOID data) 163 174 { 164 175 wxStackFrame *frame = static_cast<wxStackFrame *>(data); 165 176 … … 196 207 return; 197 208 } 198 209 199 if ( !wxDbgHelpDLL::SymEnumSymbols 210 if ( !wxDbgHelpDLL::SymEnumSymbolsT 200 211 ( 201 212 ::GetCurrentProcess(), 202 213 NULL, // DLL base: use current context … … 205 216 this // data to pass to it 206 217 ) ) 207 218 { 208 wxDbgHelpDLL::LogError(wxT("SymEnumSymbols "));219 wxDbgHelpDLL::LogError(wxT("SymEnumSymbolsT")); 209 220 } 210 221 } 211 222 … … 233 244 // below which should be a real handle... so this is what we use 234 245 const HANDLE hProcess = ::GetCurrentProcess(); 235 246 236 if ( !wxDbgHelpDLL::SymInitialize 247 if ( !wxDbgHelpDLL::SymInitializeT 237 248 ( 238 249 hProcess, 239 250 NULL, // use default symbol search path 240 251 TRUE // load symbols for all loaded modules 241 252 ) ) 242 253 { 243 wxDbgHelpDLL::LogError(wxT("SymInitialize "));254 wxDbgHelpDLL::LogError(wxT("SymInitializeT")); 244 255 245 256 return; 246 257 } … … 383 394 return false; 384 395 } 385 396 386 void wxStackFrame::OnParam( _SYMBOL_INFO *WXUNUSED(pSymInfo))397 void wxStackFrame::OnParam(wxPSYMBOL_INFO WXUNUSED(pSymInfo)) 387 398 { 388 399 } 389 400