Re: [Mingw-users] GCC 4.3.0 20080502 (alpha) Released - Please help us test it!
- Date: Thu, 08 May 2008 12:50:43 +0700
- From: Tonal <tonal@xxxxxxxxxxx>
- Subject: 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