diff options
Diffstat (limited to 'ext/com/COM.c')
| -rw-r--r-- | ext/com/COM.c | 39 | 
1 files changed, 35 insertions, 4 deletions
| diff --git a/ext/com/COM.c b/ext/com/COM.c index cb42bfc4f7..f8149faf7c 100644 --- a/ext/com/COM.c +++ b/ext/com/COM.c @@ -65,7 +65,6 @@  #include "php_VARIANT.h"  static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC); -static int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC);  static int do_COM_offget(VARIANT *result, comval *array, pval *property, int cleanup TSRMLS_DC);  static int do_COM_propget(VARIANT *var_result, comval *obj, pval *arg_property, int cleanup TSRMLS_DC);  static void php_register_COM_class(TSRMLS_D); @@ -1424,6 +1423,32 @@ PHPAPI int php_COM_set_property_handler(zend_property_reference *property_refere  	return SUCCESS;  } +/* create an overloaded COM object from a dispatch pointer */ +PHPAPI zval *php_COM_object_from_dispatch(IDispatch *disp, zval *val TSRMLS_DC) +{ +	comval *obj; +	long rid; +	zval *zobj; +	 +	ALLOC_COM(obj); +	C_DISPATCH(obj) = disp; +	php_COM_set(obj, &C_DISPATCH(obj), FALSE TSRMLS_CC); +	 +	/* resource */ +	rid = zend_list_insert(obj, IS_COM); + +	if (val == NULL) +		MAKE_STD_ZVAL(val); +	ZVAL_RESOURCE(val, rid); + +	/* now we want an object */ +	MAKE_STD_ZVAL(zobj); +	object_init_ex(zobj, &COM_class_entry); +	zend_hash_index_update(Z_OBJPROP_P(zobj), 0, &val, sizeof(zval *), NULL);	 + +	return zobj; +} +  PHPAPI void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)  { @@ -1672,7 +1697,7 @@ static ITypeLib *php_COM_find_typelib(char *search_string, int mode TSRMLS_DC)  } -static int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC) +PHPAPI int php_COM_load_typelib(ITypeLib *TypeLib, int mode TSRMLS_DC)  {  	ITypeComp *TypeComp;  	int i; @@ -1800,11 +1825,18 @@ static void php_COM_init(int module_number TSRMLS_DC)  	php_register_COM_class(TSRMLS_C);  } +PHPAPI ZEND_DECLARE_MODULE_GLOBALS(com) + +static void php_com_init_globals(zend_com_globals *com_globals) +{ +}  PHP_MINIT_FUNCTION(COM)  { +	ZEND_INIT_MODULE_GLOBALS(com, php_com_init_globals, NULL);  	php_COM_init(module_number TSRMLS_CC);  	php_VARIANT_init(module_number TSRMLS_CC); +	php_COM_dispatch_init(module_number TSRMLS_CC);  	REGISTER_LONG_CONSTANT("CLSCTX_INPROC_SERVER",  CLSCTX_INPROC_SERVER, CONST_CS | CONST_PERSISTENT);  	REGISTER_LONG_CONSTANT("CLSCTX_INPROC_HANDLER", CLSCTX_INPROC_HANDLER, CONST_CS | CONST_PERSISTENT); @@ -1818,7 +1850,6 @@ PHP_MINIT_FUNCTION(COM)  	return SUCCESS;  } -  PHP_MSHUTDOWN_FUNCTION(COM)  {  	UNREGISTER_INI_ENTRIES(); @@ -1835,7 +1866,7 @@ zend_module_entry COM_module_entry = {      PHP_MSHUTDOWN(COM),      NULL,      NULL, -    PHP_MINFO(COM), +	PHP_MINFO(COM),      NO_VERSION_YET,      STANDARD_MODULE_PROPERTIES  }; | 
