Web lists-archives.org

Re: [Mingw-users] GCC 4.3.0 20080502 (alpha) Released - Please help us test it!




Aaron W. LaFramboise wrote:
>> 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@xxxxxxxxxxxxxxxxxxxxx

You may change your MinGW Account Options or unsubscribe at:
https://lists.sourceforge.net/lists/listinfo/mingw-users