From: "A.Appleyard" Organization: Materials Science Centre To: DJGPP AT delorie DOT com Date: Fri, 14 Jun 1996 09:45:35 GMT Subject: Re: RSX funny : Windows query: one solved Message-ID: <2E5D4A560F5@fs2.mt.umist.ac.uk> "A.Appleyard" wrote:- > I am having a go at using RSX to compile Windows applications with djgpp. > ... WinMain called CreateWindow() and then went into a message loop. ... > CreateWindow() obstinately persisted in returning zero to say that it > couldn't create a window. ... After I commented out the line `#define STRICT' , the program ran OK. I think I know what happened. My WINDOWS.H has this:- #define pk __attribute__((packed)) ... #if defined(STRICT)&&!defined(_GNUC_) typedef const void NEAR* HANDLE; #define DECLARE_HANDLE(name) \ struct name##__ {int unused pk;}; typedef const struct name##__ NEAR* name #define DECLARE_HANDLE32(name) \ struct name##__ {int unused pk;}; typedef const struct name##__ FAR* name #else /* STRICT */ typedef UINT HANDLE; #define DECLARE_HANDLE(name) typedef UINT name #define DECLARE_HANDLE32(name) typedef DWORD name #endif /* !STRICT */ where a HANDLE is an int or a NEAR*, which are both 2 bytes (in Windows compilers), and a HANDLE32 is a long or a FAR*, which are both 4 bytes. But djgpp treats NEAR* and FAR* the same, as RSX #defines NEAR and FAR as null, and in STRICT mode a HANDLE used as an element of a struct gets 4 bytes and not 2, throwing everything out.