⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 php_w32api.h

📁 php-4.4.7学习linux时下载的源代码
💻 H
字号:
/*   +----------------------------------------------------------------------+   | PHP version 4.0                                                      |   +----------------------------------------------------------------------+   | Copyright (c) 1997-2007 The PHP Group                                |   +----------------------------------------------------------------------+   | This source file is subject to version 3.01 of the PHP license,      |   | that is bundled with this package in the file LICENSE, and is        |   | available through the world-wide-web at the following url:           |   | http://www.php.net/license/3_01.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.               |   +----------------------------------------------------------------------+   | Authors: James Moore <jmoore@php.net>                                |   +----------------------------------------------------------------------+*//* $Id: php_w32api.h,v 1.4.2.1.12.2 2007/01/01 09:46:49 sebastian Exp $ */#if		HAVE_W32API#ifndef PHP_W32API_H#define PHP_W32API_H/* ================================================================================================ * Type Definitions * ================================================================================================ */typedef struct _w32api_lib_handle									w32api_lib_handle;typedef struct _w32api_func_handle									w32api_func_handle;typedef struct _w32api_type_handle									w32api_type_handle; typedef struct _w32api_type_instance								w32api_type_instance;typedef struct _arguments											arguments;typedef struct _argument											argument;typedef union  _w32api_parser_function_definition_union				w32api_parser_function_definition_union; typedef struct _w32api_func_handle_ptr								w32api_func_handle_ptr;typedef struct _w32api_type_handle_ptr								w32api_type_handle_ptr;typedef union  _w32api_parser_type_definition_union					w32api_parser_type_definition_union;typedef struct _member												member;typedef struct _members												members;typedef union  _w32api_result										w32api_result;typedef struct _w32api_dynamic_param								w32api_dynamic_param; struct _w32api_lib_handle {	HINSTANCE					handle;								/* Handle for our library */	char						*library_name;						/* name of our library */	int							ref_count;							/* reference counter */};struct _w32api_func_handle_ptr										/* Temporary structure */{																	/* To work around problems */	w32api_func_handle			*hnd;								/* at 3am.. Ill sort it out */};																	/* When I can think straight */																	struct _w32api_type_handle_ptr										/* Ditto.. should really combine */{																	/* These two into a union at least */	w32api_type_handle			*hnd;};struct _w32api_type_handle {	char						*type_name;							/* Name of our type */	long						size;								/* Size of type */	members						*member_list;						/* Pointer List of members */	long						member_count;						/* Number of members */};struct _w32api_type_instance{	w32api_type_handle			*type;								/* pointer to w32api_type_handle */	zval						**values;							/* First element of an array of ptr's to zvals */};struct _w32api_func_handle {	FARPROC						handle;								/* Handle for our function */	w32api_lib_handle			*lib;								/* Pointer to the library handle */	char						*function_name;						/* Name of our function (Alias is store if supplied) */	long						return_type_id;						/* ID of return type */	char						*return_type_name;					/* Name of return type (if W32API_COMPLEX) */	long						flags;								/* Flags for function */	arguments					*argument_list;						/* Pointer List of arguments */};struct _arguments{	argument					*arg;								/* Current Argument */	arguments					*next_arg;							/* Next Arugment */	arguments					*prev_arg;							/* Previous Argument */};struct _argument{	long						type_id;							/* ID of the return type */	char						*type_name;							/* Name of type (if W32API_COMPLEX) */	char						*argument_name;						/* Name of argument, currently not used */	long						flags;								/* Currently used for byref/byval */};struct _member{	char						*member_name;	long						member_type_id;	char						*member_type_name;	long						flags;	long						offset;};struct _members{	member						*member;	members						*next_member;	members						*prev_member;};union _w32api_result{	int							ival;							    unsigned long				lval;			        	DWORD						dwval;    void						*ptr;							    float						fval;				                double						dval;						        __int64						i64val;		  			        };struct _w32api_dynamic_param {	long						flags;	int							width;	union {		unsigned long			argument;						void					*argument_ptr;						};};union _w32api_parser_function_definition_union {	char *s;	arguments *arg;};union _w32api_parser_type_definition_union {	char *s;	members *type;};/* ================================================================================================ * Constants * ================================================================================================ *//* Recognised Base types */#define W32API_UNKNOWN									-1#define W32API_NULL										1#define W32API_INT										2#define W32API_LONG										3#define W32API_DOUBLE									4#define W32API_FLOAT									5#define W32API_STRING									6#define W32API_BYTE										7#define W32API_BOOL										8#define W32API_COMPLEX									9/* Function Flags */#define W32API_ARGPTR									(1<<0)#define W32API_BORLAND									(1<<1)#define W32API_CDECL									(1<<2)#define W32API_REAL4									(1<<3)#define W32API_REAL8									(1<<4)/* ================================================================================================ * Utility Macros * ================================================================================================ */#define PROP_SET_ARGS									zend_property_reference *property_reference, pval *value#define PROP_GET_ARGS									zend_property_reference *property_reference#define W32API_PROP_SET_FUNCTION_N(class_name)			w32api_set_property_handler_##class_name#define W32API_PROP_GET_FUNCTION_N(class_name)			w32api_get_property_handler_##class_name#define W32API_CALL_FUNCTION_N(class_name)				w32api_call_handler_##class_name#define W32API_PROP_SET_FUNCTION(class_name)			PHP_W32API_API int W32API_PROP_SET_FUNCTION_N(class_name)(PROP_SET_ARGS)#define W32API_PROP_GET_FUNCTION(class_name)			PHP_W32API_API zval W32API_PROP_GET_FUNCTION_N(class_name)(PROP_GET_ARGS)#define W32API_CALL_FUNCITON(class_name)				PHP_W32API_API void W32API_CALL_FUNCTION_N(class_name)(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)#define W32API_CLASS_FUNCTION(class_name, function_name) PHP_FUNCTION(##class_name##function_name)#define W32API_CLASS_FN(class_name, function_name) PHP_FN(##class_name##function_name)#define W32API_CLASS_FE(class_name, function_name, function_args) {#function_name, W32API_CLASS_FN(class_name, function_name), function_args},/* ================================================================================================ * Module exports, Global Variables and General Definitions * ================================================================================================ */extern zend_module_entry w32api_module_entry;#define phpext_w32api_ptr &w32api_module_entry;#define PHP_W32API_API __declspec(dllexport)#ifdef ZTS#include "TSRM.h"#endif /* ZTS */ZEND_BEGIN_MODULE_GLOBALS(w32api)	zend_class_entry	*win32_ce;				/* The class entry for our win32 class */	zend_class_entry	*type_ce;				/* The class entry for our type class */	HashTable			*funcs;					/* Functions we registered */	HashTable			*libraries;				/* Libraries we load using LoadLibrary */	HashTable			*types;					/* Types we have registed with us */	HashTable			*callbacks;				/* Callbacks we have registered with us */	long				le_type_instance;		/* Resource hanlde for runtime instances */ZEND_END_MODULE_GLOBALS(w32api)ZEND_DECLARE_MODULE_GLOBALS(w32api)#ifdef ZTS#define WG(v) TSRMG(w32api_globals_id, zend_w32api_globals *, v)#else#define WG(v) (w32api_globals.v)#endif/* ================================================================================================ * Startup, Shutdown and Info Functions * ================================================================================================ */PHP_MINIT_FUNCTION(w32api);PHP_MSHUTDOWN_FUNCTION(w32api);PHP_RINIT_FUNCTION(w32api);PHP_RSHUTDOWN_FUNCTION(w32api);PHP_MINFO_FUNCTION(w32api);static void php_w32api_init_globals(zend_w32api_globals *w32api_globals);static void php_w32api_hash_lib_dtor(void *data);static void php_w32api_hash_func_dtor(void *data);static void php_w32api_hash_callback_dtor(void *data);static void php_w32api_hash_type_dtor(void *data);static void w32api_type_instance_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC);/* ================================================================================================ * Win32 Class Functions * ================================================================================================ */int win32_class_init(TSRMLS_D);int win32_class_rshutdown(TSRMLS_D);W32API_CLASS_FUNCTION(win32, registerfunction);W32API_CLASS_FUNCTION(win32, unregisterfunction);W32API_CLASS_FUNCTION(win32, registercallback);W32API_CLASS_FUNCTION(win32, definetype);W32API_CLASS_FUNCTION(win32, gettypesize);W32API_CLASS_FUNCTION(win32, inittype);W32API_CLASS_FUNCTION(win32, decref);W32API_CLASS_FUNCTION(win32, invokefunction);			/* ================================================================================================ * Type Class Functions * ================================================================================================ */int type_class_init(TSRMLS_DC);W32API_CLASS_FUNCTION(type, clone);W32API_PROP_SET_FUNCTION(type);W32API_PROP_GET_FUNCTION(type);/* ================================================================================================ * Utility Functions * ================================================================================================ */static int php_w32api_load_function (char *definition, int definition_len, int flags TSRMLS_DC);static void php_w32api_unload_function (w32api_func_handle **fh TSRMLS_DC);static int php_w32api_load_library (char *library_name, w32api_lib_handle **lh TSRMLS_DC);static void php_w32api_unload_library (w32api_lib_handle *lh, int flags TSRMLS_DC);static int php_w32api_register_callback(char *function_definition, int function_definition_len TSRMLS_DC);static void php_w32api_free_arguments(arguments *argument_list);static void php_w32api_free_members(members *member_list);static int php_w32api_get_type_id_from_name(char *type);static unsigned char *php_w32api_do_arg_types(arguments **arguments);void php_w32api_marshall_zval_to_c(argument *arg, w32api_dynamic_param *dp, zval *pzval TSRMLS_DC);static void php_w32api_init_type(w32api_type_handle *th, zval *obj TSRMLS_DC);static int php_w32api_do_prop_get(zval *object, zval *return_value, zend_llist_element **element TSRMLS_DC);static int php_w32api_do_prop_set(zval *object, zval *value, zend_llist_element **element TSRMLS_DC);static void *php_w32api_complex_marshall_zval_to_c(zval *pzval, int *width, void *data TSRMLS_DC);/* ================================================================================================ * Parser & Scanner Functions * ================================================================================================ */#define w32api_parser_load_alias_function w32api_parser_load_function_ex#define w32api_parser_load_function(return_type, function_name, arguments, library_name) w32api_parser_load_function_ex (return_type, function_name, NULL, arguments, library_name)#define w32api_parser_make_argument_byref(arg_type, arg_name) w32api_parser_make_argument(arg_type, arg_name, BYREF_FORCE)#define w32api_parser_make_argument_byval(arg_type, arg_name) w32api_parser_make_argument(arg_type, arg_name, BYREF_NONE)#define w32api_parser_type_make_byref_value(member_name, member_type) w32api_parser_type_make_value(member_name, member_type, BYREF_FORCE)#define w32api_parser_type_make_byval_value(member_name, member_type) w32api_parser_type_make_value(member_name, member_type, BYREF_NONE)w32api_func_handle *w32api_parser_load_function_ex(char *return_type, char *function_name, char *alias_name, arguments *argument_list, char *library_name);arguments *w32api_parser_make_argument(char *arg_type, char *arg_name, int byref);arguments *w32api_parser_join_arguments(arguments *lval, arguments *rval);int w32api_function_definition_error(char *s);w32api_type_handle *w32api_parser_register_type(char *type_name, members *member_list);members *w32api_parser_type_make_value(char *member_name, char *type_name, long flags);members *w32api_parser_type_join_values(members *lval, members *rval);int w32api_type_definition_error(char *s);struct yy_buffer_state *w32api_function_definition_scan_bytes(char *bytes, int len);	/* Definied in w32api_function_definition_scanner.c */int w32api_function_definition_parse(void *fh);											/* Definied in w32api_function_definition_parser.c */struct yy_buffer_state *w32api_type_definition_scan_bytes(char *bytes, int len);		/* Definied in w32api_type_definition_scanner.c */int w32api_type_definition_parse(void *th);												/* Definied in w32api_type_definition_parser.c *//* ================================================================================================ * Various Debugging Functions * ================================================================================================ */#ifndef NDEBUGW32API_CLASS_FUNCTION(win32, dump_library_hash);W32API_CLASS_FUNCTION(win32, dump_function_hash);W32API_CLASS_FUNCTION(win32, dump_callback_hash);W32API_CLASS_FUNCTION(win32, dump_type_hash);int php_w32api_dump_library_hash_cb(void *pData TSRMLS_DC);int php_w32api_dump_function_hash_cb(void *pData TSRMLS_DC);int php_w32api_dump_callback_hash_cb(void *pData TSRMLS_DC);int php_w32api_dump_type_hash_cb(void *pData TSRMLS_DC);void php_w32api_print_arguments(arguments *argument_list);void php_w32api_print_members(members *member_list);#endif  /* ifndef	NDEBUG */ #endif	/* ifndef	PHP_W32API_H */#endif  /* if		HAVE_W32API  */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -