| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
>> One thing that I've found very useful is to translate Unix signals >> into C++ exceptions (from GCC 4.2 this is supported on Linux). One >> gets semantics very close to what MS VC++: >> >> try { >> *(int*)0 = 0; >> } catch ( SignalException* pse ) { >> printf( "Exception condition: %s\n", pse->GetReason() ); >> } >> Not only this. If I use MSVC & Delphi I can write the following: [code=cpp] void __declspec(dllexport) walk_res(void (*iter)(void*, const res_t&), void* user_data) { RAII_Locker(res_container); for ( res_iterator_t cur = res_container.begin(), end=res_container.end(); cur != end; ++cur ) iter(user_data, *cur); } [/code] [code=delphi] Delphi code procedure iterate(var consumer: MyClass; var res: res_t); begin if not consumer.accept(res) then raise StopIterate end; procedure MyClass.DoWolk(); begin try walk_res(@iterate, self); except on e: StopIterate do exit; on e: Exception do raise; end; end; [/code] But if the C ++ code will be compiled MinGW then call destructor RAII_Locker never happen. If such places are many, it is easier to use another compiler than to try to change the code to work with __try1/__except1 of excpt.h. In addition, the use __try1/__except1 very difficult and nowhere described. > However, the problem is not that the exception throwing or catching is > slow. The problem is that merely passing through a try {} block or A problem with DWARF exceptions will be that it is impossible to use winapi and exceptions C++ together. Example: [code=cpp] #include <iostream> #include <windows.h> #include "res.rh" INT_PTR CALLBACK DlgFunc(HWND, UINT, WPARAM, LPARAM) { throw 1; } int main() { try { ::DialogBox(0, LPCTSTR(DLG_RES), 0, DlgFunc); } catch (...) { std::cout<<"Exception: ..."<<std::endl; } } [/code] Output: [code] terminate called after throwing an instance of 'int' This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. [/code] All windows common libraries, such as Qt, wxWindow, fltk use winapi-callback. So that mingw 4.3 will not use C + + exceptions in programs with the UI. -- Alexandr N. Zamaraev ------------------------------------------------------------------------- This SF.net email is sponsored by the 2008 JavaOne(SM) Conference Don't miss this year's exciting event. There's still time to save $100. Use priority code J8TL2D2. http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone _______________________________________________ MinGW-users mailing list MinGW-users You may change your MinGW Account Options or unsubscribe at: https://lists.sourceforge.net/lists/listinfo/mingw-users
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
© 2004-2008 readlist.com