diff --git a/ext/com_dotnet/com_com.c b/ext/com_dotnet/com_com.c index 63fc8f6563b2..e0fbb0c17399 100644 --- a/ext/com_dotnet/com_com.c +++ b/ext/com_dotnet/com_com.c @@ -670,7 +670,8 @@ PHP_FUNCTION(com_create_guid) /* {{{ Connect events from a COM object to a PHP object */ PHP_FUNCTION(com_event_sink) { - zval *object, *sinkobject; + zend_object *object; + zend_object *sinkobject; zend_string *sink_str = NULL; HashTable *sink_ht = NULL; zend_string *type_lib_name = NULL; @@ -679,8 +680,8 @@ PHP_FUNCTION(com_event_sink) ITypeInfo *typeinfo = NULL; ZEND_PARSE_PARAMETERS_START(2, 3) - Z_PARAM_OBJECT_OF_CLASS(object, php_com_variant_class_entry) - Z_PARAM_OBJECT(sinkobject) + Z_PARAM_OBJ_OF_CLASS(object, php_com_variant_class_entry) + Z_PARAM_OBJ(sinkobject) Z_PARAM_OPTIONAL Z_PARAM_ARRAY_HT_OR_STR_OR_NULL(sink_ht, sink_str) ZEND_PARSE_PARAMETERS_END(); @@ -688,7 +689,7 @@ PHP_FUNCTION(com_event_sink) RETVAL_FALSE; php_com_initialize(); - obj = CDNO_FETCH(object); + obj = (php_com_dotnet_object*)object; if (sink_ht) { /* 0 => typelibname, 1 => dispname */ diff --git a/ext/com_dotnet/com_variant.c b/ext/com_dotnet/com_variant.c index 82f17d12d9b5..87d33da1daf4 100644 --- a/ext/com_dotnet/com_variant.c +++ b/ext/com_dotnet/com_variant.c @@ -115,7 +115,7 @@ static void php_com_variant_from_zval_ex(VARIANT *v, zval *z, int codepage, VART break; case IS_OBJECT: - if (php_com_is_valid_object(z)) { + if (php_com_is_valid_object(Z_OBJ_P(z))) { obj = CDNO_FETCH(z); if (V_VT(&obj->v) == VT_DISPATCH) { /* pass the underlying object */ @@ -132,7 +132,7 @@ static void php_com_variant_from_zval_ex(VARIANT *v, zval *z, int codepage, VART } else { /* export the PHP object using our COM wrapper */ V_VT(v) = VT_DISPATCH; - V_DISPATCH(v) = php_com_wrapper_export(z); + V_DISPATCH(v) = php_com_wrapper_export(Z_OBJ_P(z)); } break; diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c index 175a2de33074..a040c0a84aba 100644 --- a/ext/com_dotnet/com_wrapper.c +++ b/ext/com_dotnet/com_wrapper.c @@ -499,11 +499,11 @@ static void generate_dispids(php_dispatchex *disp) } } -static php_dispatchex *disp_constructor(zval *object) +static php_dispatchex *disp_constructor(zend_object *object) { php_dispatchex *disp = (php_dispatchex*)CoTaskMemAlloc(sizeof(php_dispatchex)); - trace("constructing a COM wrapper for PHP object %p (%s)\n", object, ZSTR_VAL(Z_OBJCE_P(object)->name)); + trace("constructing a COM wrapper for PHP object %p (%s)\n", object, ZSTR_VAL(object->ce->name)); if (disp == NULL) return NULL; @@ -516,7 +516,7 @@ static php_dispatchex *disp_constructor(zval *object) if (object) { - ZVAL_COPY(&disp->object, object); + ZVAL_OBJ_COPY(&disp->object, object); } else { ZVAL_UNDEF(&disp->object); } @@ -536,7 +536,7 @@ static void disp_destructor(php_dispatchex *disp) CoTaskMemFree(disp); } -PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid, +PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zend_object *val, GUID *sinkid, HashTable *id_to_name) { php_dispatchex *disp = disp_constructor(val); @@ -572,17 +572,13 @@ PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *si return (IDispatch*)disp; } -PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zval *val) +PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zend_object *val) { php_dispatchex *disp = NULL; - if (Z_TYPE_P(val) != IS_OBJECT) { - return NULL; - } - if (php_com_is_valid_object(val)) { /* pass back its IDispatch directly */ - php_com_dotnet_object *obj = CDNO_FETCH(val); + php_com_dotnet_object *obj = (php_com_dotnet_object*)val; if (obj == NULL) return NULL; diff --git a/ext/com_dotnet/php_com_dotnet_internal.h b/ext/com_dotnet/php_com_dotnet_internal.h index c7e065c24872..64a1884244ca 100644 --- a/ext/com_dotnet/php_com_dotnet_internal.h +++ b/ext/com_dotnet/php_com_dotnet_internal.h @@ -44,9 +44,9 @@ typedef struct _php_com_dotnet_object { HashTable *id_of_name_cache; } php_com_dotnet_object; -static inline bool php_com_is_valid_object(zval *zv) +static inline bool php_com_is_valid_object(zend_object *obj) { - zend_class_entry *ce = Z_OBJCE_P(zv); + const zend_class_entry *ce = obj->ce; return zend_string_equals_literal(ce->name, "com") || zend_string_equals_literal(ce->name, "dotnet") || zend_string_equals_literal(ce->name, "variant"); @@ -54,7 +54,7 @@ static inline bool php_com_is_valid_object(zval *zv) #define CDNO_FETCH(zv) (php_com_dotnet_object*)Z_OBJ_P(zv) #define CDNO_FETCH_VERIFY(obj, zv) do { \ - if (!php_com_is_valid_object(zv)) { \ + if (!php_com_is_valid_object(Z_OBJ_P(zv))) { \ php_com_throw_exception(E_UNEXPECTED, "expected a variant object"); \ return; \ } \ @@ -99,8 +99,8 @@ zend_result php_com_do_invoke_byref(php_com_dotnet_object *obj, zend_internal_fu WORD flags, VARIANT *v, int nargs, zval *args); /* com_wrapper.c */ -PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zval *val, GUID *sinkid, HashTable *id_to_name); -PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zval *val); +PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export_as_sink(zend_object *val, GUID *sinkid, HashTable *id_to_name); +PHP_COM_DOTNET_API IDispatch *php_com_wrapper_export(zend_object *val); /* com_persist.c */ void php_com_persist_minit(INIT_FUNC_ARGS);