diff options
Diffstat (limited to 'src/w32common.h')
-rw-r--r-- | src/w32common.h | 54 |
1 files changed, 51 insertions, 3 deletions
diff --git a/src/w32common.h b/src/w32common.h index 6de4ab4bfd8..6b9c2c08dde 100644 --- a/src/w32common.h +++ b/src/w32common.h @@ -1,5 +1,5 @@ /* Common functions for Microsoft Windows builds of Emacs - Copyright (C) 2012-2017 Free Software Foundation, Inc. + Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -41,8 +41,8 @@ extern int w32_minor_version; extern int w32_build_number; enum { - OS_9X = 1, - OS_NT + OS_SUBTYPE_9X = 1, + OS_SUBTYPE_NT }; extern int os_subtype; @@ -50,4 +50,52 @@ extern int os_subtype; /* Cache system info, e.g., the NT page size. */ extern void cache_system_info (void); +#ifdef WINDOWSNT +/* Return a static buffer with the MS-Windows version string. */ +extern char * w32_version_string (void); +#endif + +typedef void (* VOIDFNPTR) (void); + +/* Load a function address from a DLL. Cast the result via VOIDFNPTR + to pacify -Wcast-function-type in GCC 8.1. The return value must + be cast to the correct function pointer type. */ +INLINE VOIDFNPTR get_proc_addr (HINSTANCE, LPCSTR); +INLINE VOIDFNPTR +get_proc_addr (HINSTANCE handle, LPCSTR fname) +{ + return (VOIDFNPTR) GetProcAddress (handle, fname); +} + +/* Define a function that will be loaded from a DLL. The variable + arguments should contain the argument list for the function, and + optionally be followed by function attributes. For example: + DEF_DLL_FN (void, png_longjmp, (png_structp, int) PNG_NORETURN); + */ +#define DEF_DLL_FN(type, func, ...) \ + typedef type (CDECL *W32_PFN_##func) __VA_ARGS__; \ + static W32_PFN_##func fn_##func + +/* Load a function from the DLL. */ +#define LOAD_DLL_FN(lib, func) \ + do \ + { \ + fn_##func = (W32_PFN_##func) get_proc_addr (lib, #func); \ + if (!fn_##func) \ + return false; \ + } \ + while (false) + +/* Load a function from the DLL, and don't fail if it does not exist. */ +#define LOAD_DLL_FN_OPT(lib, func) \ + do \ + { \ + fn_##func = (W32_PFN_##func) get_proc_addr (lib, #func); \ + } \ + while (false) + +#ifdef HAVE_HARFBUZZ +extern bool hbfont_init_w32_funcs (HMODULE); +#endif + #endif /* W32COMMON_H */ |