mirror of
https://github.com/php/php-src.git
synced 2024-11-26 03:16:33 +08:00
137 lines
4.7 KiB
C
137 lines
4.7 KiB
C
/*
|
|
+----------------------------------------------------------------------+
|
|
| PHP Version 4 |
|
|
+----------------------------------------------------------------------+
|
|
| Copyright (c) 1997-2002 The PHP Group |
|
|
+----------------------------------------------------------------------+
|
|
| This source file is subject to version 2.02 of the PHP license, |
|
|
| that is bundled with this package in the file LICENSE, and is |
|
|
| available at through the world-wide-web at |
|
|
| http://www.php.net/license/2_02.txt. |
|
|
| If you did not receive a copy of the PHP license and are unable to |
|
|
| obtain it through the world-wide-web, please send a note to |
|
|
| license@php.net so we can mail you a copy immediately. |
|
|
+----------------------------------------------------------------------+
|
|
| Author: James Moore <jmoore@php.net> |
|
|
+----------------------------------------------------------------------+
|
|
*/
|
|
|
|
/* $Id$ */
|
|
|
|
#if HAVE_W32API
|
|
|
|
#ifndef PHP_W32API_H
|
|
#define PHP_W32API_H
|
|
|
|
extern zend_module_entry w32api_module_entry;
|
|
#define phpext_w32api_ptr &w32api_module_entry
|
|
|
|
#ifdef PHP_WIN32
|
|
#define PHP_W32API_API __declspec(dllexport)
|
|
#else
|
|
#define PHP_W32API_API
|
|
#endif
|
|
|
|
#ifdef ZTS
|
|
#include "TSRM.h"
|
|
#endif
|
|
|
|
ZEND_BEGIN_MODULE_GLOBALS(w32api)
|
|
HashTable *regfuncs; // HashTable of Registered function handles
|
|
HashTable *libraries; // HashTable holding pointers to the libariers
|
|
HashTable *types; // Handles for users' types
|
|
int le_dynaparm; // Resource handle
|
|
DWORD call_type; // Type of call we use when calling a DLL.
|
|
ZEND_END_MODULE_GLOBALS(w32api)
|
|
|
|
#ifdef ZTS
|
|
#define W32_G(v) TSRMG(w32api_globals_id, zend_w32api_globals *, v)
|
|
#else
|
|
#define W32_G(v) (w32api_globals.v)
|
|
#endif
|
|
|
|
#define W32_REG_CONST(cname) REGISTER_LONG_CONSTANT(#cname, cname, CONST_CS | CONST_PERSISTENT);
|
|
|
|
#define DC_MICROSOFT 0x0000 // Default
|
|
#define DC_BORLAND 0x0001 // Borland compat
|
|
#define DC_CALL_CDECL 0x0010 // __cdecl
|
|
#define DC_CALL_STD 0x0020 // __stdcall
|
|
#define DC_RETVAL_MATH4 0x0100 // Return value in ST
|
|
#define DC_RETVAL_MATH8 0x0200 // Return value in ST
|
|
|
|
#define DC_CALL_STD_BO (DC_CALL_STD | DC_BORLAND)
|
|
#define DC_CALL_STD_MS (DC_CALL_STD | DC_MICROSOFT)
|
|
#define DC_CALL_STD_M8 (DC_CALL_STD | DC_RETVAL_MATH8)
|
|
|
|
#define DC_FLAG_ARGPTR 0x00000002
|
|
|
|
typedef struct W32APIFE {
|
|
FARPROC fp; // Pointer to the function
|
|
char *rettype; // return value type
|
|
int retvaltype; // if complex = 1 if simple = 0
|
|
} W32APIFE;
|
|
|
|
typedef struct _field {
|
|
char *fname; // Fields name
|
|
char *type; // Type of field
|
|
int fsize; // size of field
|
|
} field;
|
|
|
|
typedef struct runtime_struct {
|
|
char *name; // structs name
|
|
long size; // structs size
|
|
void *fields; // pointer to an array of fields
|
|
} runtime_struct;
|
|
|
|
#pragma pack(1) // Set struct packing to one byte
|
|
|
|
typedef union RESULT { // Various result types
|
|
int Int; // Generic four-byte type
|
|
long Long; // Four-byte long
|
|
void *Pointer; // 32-bit pointer
|
|
float Float; // Four byte real
|
|
double Double; // 8-byte real
|
|
__int64 int64; // big int (64-bit)
|
|
} RESULT;
|
|
|
|
|
|
typedef struct DYNAPARM {
|
|
DWORD dwFlags; // Parameter flags
|
|
int nWidth; // Byte width
|
|
union { //
|
|
DWORD dwArg; // 4-byte argument
|
|
void *pArg; // Pointer to argument
|
|
};
|
|
} DYNAPARM;
|
|
|
|
|
|
PHP_W32API_API RESULT php_w32api_dynamic_dll_call(
|
|
int Flags,
|
|
DWORD lpFunction,
|
|
int nArgs,
|
|
DYNAPARM Param[],
|
|
LPVOID pRet,
|
|
int nRetSize
|
|
);
|
|
|
|
static void php_w32api_init_globals(zend_w32api_globals *w32api_globals);
|
|
static void php_w32api_dtor_libary(void *data);
|
|
static void php_w32api_unload_libraries();
|
|
|
|
PHP_MINFO_FUNCTION(w32api);
|
|
PHP_MINIT_FUNCTION(w32api);
|
|
PHP_MSHUTDOWN_FUNCTION(w32api);
|
|
|
|
PHP_FUNCTION(w32api_register_function);
|
|
PHP_FUNCTION(w32api_invoke_function);
|
|
PHP_FUNCTION(w32api_deftype);
|
|
PHP_FUNCTION(w32api_init_dtype);
|
|
PHP_FUNCTION(w32api_set_call_method);
|
|
|
|
static void register_constants(int module_number);
|
|
static void w32api_free_dynaparm(zend_rsrc_list_entry *rsrc TSRMLS_DC);
|
|
void get_arg_pointer(zval **value, void ** argument);
|
|
DYNAPARM w32api_convert_zval_to_dynparam(zval ** carg TSRMLS_DC);
|
|
|
|
#endif /* PHP_W32API_H */
|
|
#endif /* HAVE_W32API */ |