Added support for strict handles. Only works on machines where

sizeof(UINT) == sizeof(void*).
This commit is contained in:
Adrian Thurston 1999-04-25 11:05:30 +00:00 committed by Alexandre Julliard
parent 586793ffd8
commit 4eb5edf961
2 changed files with 48 additions and 16 deletions

View File

@ -110,12 +110,25 @@ typedef double DOUBLE;
typedef double LONGLONG;
typedef double ULONGLONG;
/* Integer types. These are the same for emulator and library. */
/* FIXME: Wine does not compile with strict on, therefore strict
* handles are presently only usable on machines where sizeof(UINT) ==
* sizeof(void*). HANDLEs are supposed to be void* but a large amount
* of WINE code operates on HANDLES as if they are UINTs. So to WINE
* they exist as UINTs but to the Winelib user who turns on strict,
* they exist as void*. If there is a size difference between UINT and
* void* then things get ugly. */
#ifdef STRICT
typedef UINT16 HANDLE16;
typedef VOID* HANDLE;
#else
typedef UINT16 HANDLE16;
typedef UINT HANDLE;
typedef UINT16 *LPHANDLE16;
typedef UINT *LPHANDLE;
#endif
typedef HANDLE16 *LPHANDLE16;
typedef HANDLE *LPHANDLE;
/* Integer types. These are the same for emulator and library. */
typedef UINT16 WPARAM16;
typedef UINT WPARAM;
typedef LONG LPARAM;
@ -183,14 +196,26 @@ typedef void* SEGPTR;
/* Handle types that exist both in Win16 and Win32. */
#ifdef STRICT
#define DECLARE_HANDLE(a) \
typedef HANDLE16 a##16; \
typedef HANDLE a; \
typedef a##16 *P##a##16; \
typedef a##16 *NP##a##16; \
typedef a##16 *LP##a##16; \
typedef struct a##__ { int unused; } *a; \
typedef a *P##a; \
typedef a *LP##a
#else /*STRICT*/
#define DECLARE_HANDLE(a) \
typedef HANDLE16 a##16; \
typedef a##16 *P##a##16; \
typedef a##16 *NP##a##16; \
typedef a##16 *LP##a##16; \
typedef HANDLE a; \
typedef a *P##a; \
typedef a *LP##a
#endif /*STRICT*/
DECLARE_HANDLE(HACMDRIVERID);
DECLARE_HANDLE(HACMDRIVER);
DECLARE_HANDLE(HACMOBJ);
@ -209,11 +234,8 @@ DECLARE_HANDLE(HDWP);
DECLARE_HANDLE(HENHMETAFILE);
DECLARE_HANDLE(HFILE);
DECLARE_HANDLE(HFONT);
DECLARE_HANDLE(HGDIOBJ);
DECLARE_HANDLE(HGLOBAL);
DECLARE_HANDLE(HICON);
DECLARE_HANDLE(HINSTANCE);
DECLARE_HANDLE(HLOCAL);
DECLARE_HANDLE(HMENU);
DECLARE_HANDLE(HMETAFILE);
DECLARE_HANDLE(HMIDI);
@ -223,7 +245,6 @@ DECLARE_HANDLE(HMIDISTRM);
DECLARE_HANDLE(HMIXER);
DECLARE_HANDLE(HMIXEROBJ);
DECLARE_HANDLE(HMMIO);
DECLARE_HANDLE(HMODULE);
DECLARE_HANDLE(HPALETTE);
DECLARE_HANDLE(HPEN);
DECLARE_HANDLE(HQUEUE);
@ -241,6 +262,17 @@ DECLARE_HANDLE(HIC);
DECLARE_HANDLE(HRASCONN);
#undef DECLARE_HANDLE
/* Handle types that must remain interchangeable even with strict on */
typedef HINSTANCE16 HMODULE16;
typedef HINSTANCE HMODULE;
typedef HANDLE16 HGDIOBJ16;
typedef HANDLE16 HGLOBAL16;
typedef HANDLE16 HLOCAL16;
typedef HANDLE HGDIOBJ;
typedef HANDLE HGLOBAL;
typedef HANDLE HLOCAL;
/* Callback function pointers types */
typedef BOOL (CALLBACK* DATEFMT_ENUMPROCA)(LPSTR);

View File

@ -44,13 +44,13 @@
#define HEX_REG_RESOURCE_LIST 0x80000008
#define HEX_REG_FULL_RESOURCE_DESCRIPTOR 0x80000009
#define HKEY_CLASSES_ROOT 0x80000000
#define HKEY_CURRENT_USER 0x80000001
#define HKEY_LOCAL_MACHINE 0x80000002
#define HKEY_USERS 0x80000003
#define HKEY_PERFORMANCE_DATA 0x80000004
#define HKEY_CURRENT_CONFIG 0x80000005
#define HKEY_DYN_DATA 0x80000006
#define HKEY_CLASSES_ROOT ((HKEY) 0x80000000)
#define HKEY_CURRENT_USER ((HKEY) 0x80000001)
#define HKEY_LOCAL_MACHINE ((HKEY) 0x80000002)
#define HKEY_USERS ((HKEY) 0x80000003)
#define HKEY_PERFORMANCE_DATA ((HKEY) 0x80000004)
#define HKEY_CURRENT_CONFIG ((HKEY) 0x80000005)
#define HKEY_DYN_DATA ((HKEY) 0x80000006)
#define REG_OPTION_RESERVED 0x00000000
#define REG_OPTION_NON_VOLATILE 0x00000000