A few notes about C++ compiles (Watcom C++, Borland C++, M$C++) : - there is no standard for the following: a) naming convention : Each compiler uses it's own so you can not mix code from each compiler. b) how global constructors and deconstructors should be called. Borland uses the _INIT_ and _INITEND_ segments for constructors and the _EXIT_ and _EXITEND_ for it's deconstructors. Watcom uses similar segmensts called XIB,XI,XIE for the constructors. I uses the CONST2 for the deconstructors (but in a different manner). M$C uses .CRT$XCU (why the hell?). Borland's and Watcom's segments are somewhat the same inside in that each entry in the segments are as follows: db 0 db priority dd offset constructor But this applies only to the constructor segments for Watcom. M$C simply uses a list of 'dd offset constructor's. M$C has no destructor tables but somehow still calls the destructors, it must call them right before it ends main(). - Borland C inserts special virtual "tags" into their OBJ (and ASM) files when creating C++ programs which WLINK can not handle. The -Vs option has fixed this problem. But note that adding this option with -S causes an internal error in BC, this only effects BCPP2ASM.BAT (new). - M$C somehow seems to call it's deconstructors without me calling them during shutdown. Must do it right before using 'ret' in main(). But I'm unsure about that, cause I didn't see where. - Watcom calls over 20k (possible more) of code at anytime with it's C++ code for some unknown reason. Right now I make all known functions simply 'ret' within my library (QLIB). - I don't know how to keep some C++ components 'static' (ie: private) so that the names will not interfere with other OBJs. Placing a 'static' keyword is not allowed. For an example check out my GUI++ package. It exports many of the classes but I want to stop that. So as you can see the C++ world is fucked! Please read fastcall.txt for info on the wonderful world of fastcall calling convention - another fucked reality. TTYL - July/97