Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions ext/com_dotnet/com_com.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -679,16 +680,16 @@ 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();

RETVAL_FALSE;

php_com_initialize();
obj = CDNO_FETCH(object);
obj = (php_com_dotnet_object*)object;

if (sink_ht) {
/* 0 => typelibname, 1 => dispname */
Expand Down
4 changes: 2 additions & 2 deletions ext/com_dotnet/com_variant.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand All @@ -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;

Expand Down
16 changes: 6 additions & 10 deletions ext/com_dotnet/com_wrapper.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
}
Expand All @@ -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);
Expand Down Expand Up @@ -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;
Expand Down
10 changes: 5 additions & 5 deletions ext/com_dotnet/php_com_dotnet_internal.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,17 +44,17 @@ 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");
}

#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; \
} \
Expand Down Expand Up @@ -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);
Expand Down