I have compiled MFC from MSVC6 (not 7) do you want a patch file?
I have a good solution for the __try __except if you are compiling C++ code. (using the C++ try catch). I'm afraid I do not have a good solution for C compilations. (Yet) But for MFC it is good.
<C++ code> #define __try try #define CONCAT(s1,s2) _CONCAT_(s1,s2) #define _CONCAT_(s1,s2) s1##s2 #define __except( foofoo ) \ catch(...){ \ int d = foofoo ; \ switch(d){ \ case 0: \ throw ; \ case -1: \ case 1 : \ goto CONCAT(label,__LINE__) ; } } CONCAT(label,__LINE__) :
<C++ code/> the double CONCAT macros are so __LINE__ gets expanded. It would not near a ## operator. the order is important. Try for yourself it took me a while. The purpose is that two __try __except statement can coexist in the same function. Also maybe at the "case 0:" we should throw a special type so we can better handle nested statements. But I have not yet investigated the exact behavior of the MSVC in that respect. So this should do for now.
Free Life Boaz
Gregory M. Turner wrote:
On Friday 03 October 2003 07:04 am, Adam Connell wrote:
I am yet another programmer trying to compile the MFC with winelib. I believe that I have the project configured correctly. I am currently working on getting it to compile. I am having trouble with Microsoft's extensions to C++ specifically: throw(...) __try __except
Is there any kind of work around for these things?
MFC v7.0 g++ v3.2.2 wine-cvs
You have uncovered a very squirmy can of worms, I'm afraid.
You have several options, all of them sub-optimal:
- Use a patched gcc, see http://reactos.wox.org/index.php?page=gccseh
- Convert the __try blocks into __TRY blocks as supported by wine, see
include/wine/exception.h. This will require pretty extensive rewriting of the affected code blocks. 3) Just use dummy macros, along the lines of those in include/rpc.h. This approach will /not/ do any real exception handling, but will get you compiling quickly... no guarantees your compiled code will work, however. 4) See my old attempts to create macros that approximate this using gcc-specific nested functions capabilities, for example, see http://www.winehq.com/hypermail/wine-devel/2003/05/0394.html There are probably a dozen or more such attempts floating around, none of them quite do the right thing of course :(
Sorry, this business is messy and so far no really satisfactory solution has been created for a number of reasons. Good luck!