Winemaker questions

Boaz Harrosh boaz at hishome.net
Mon Feb 21 02:16:41 CST 2005


Francois Gouget wrote:

>> __TRY {}/__FINALLY()? I'm not sure the changes I did are now compilable
>> under MSVC nor MingW.
>
> 4) Would there be a way to transform __try {}/__finally{} blocks to
>
> Unfortunately they don't work exactly the same. There has been many 
> attempts to improve exception support in Winelib but none that were 
> deemed good enough to be committed to CVS.

Below is a technique I use in C++. I'm not sure it can be used in C. But 
if you have C++ it is perfect. And nothing needs done in Winemaker Just 
have the #define available before the using code like in your StdAfx.h 
file.

<__try__finally>
#define __try try
#define _CONCAT_(s1,s2) s1##s2
#define __except( foofoo ) \
 catch(...){ \
 int d = foofoo ; \
 switch(d){ \
 case 0: \
   throw ; \
 case -1: \
 case 1 : \
 goto _CONCAT_(gifs,__LINE__) ; } } _CONCAT_(gifs,__LINE__) :
</__try__finally>

the CONCAT macro is because of the pseudo 2 pass of the preprocessor, 
Other wise the __LINE__ is not expanded to produce a unique goto label.
goto is used to jump over the "}}" closing scope of the catch and 
switch. So using code does not change. (There is one restriction you 
can't use 2 __except statements in the same line)

Free Life
Boaz





More information about the wine-devel mailing list