wez Tue Apr 19 02:14:57 2005 EDT Modified files: /php-src/ext/com_dotnet com_com.c com_handlers.c com_typeinfo.c php_com_dotnet_internal.h Log: merge from branch: fixes for #32758 and #32759 http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_com.c?r1=1.14&r2=1.15&ty=u Index: php-src/ext/com_dotnet/com_com.c diff -u php-src/ext/com_dotnet/com_com.c:1.14 php-src/ext/com_dotnet/com_com.c:1.15 --- php-src/ext/com_dotnet/com_com.c:1.14 Wed Jun 16 19:57:25 2004 +++ php-src/ext/com_dotnet/com_com.c Tue Apr 19 02:14:56 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: com_com.c,v 1.14 2004/06/16 23:57:25 abies Exp $ */ +/* $Id: com_com.c,v 1.15 2005/04/19 06:14:56 wez Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -398,7 +398,7 @@ default: desc = php_win_err(hr); - spprintf(&msg, 0, "Error %s", desc); + spprintf(&msg, 0, "Error [0x%08x] %s", hr, desc); LocalFree(desc); break; } @@ -620,7 +620,7 @@ efree(vargs); } - /* a bit strange this, but... */ + /* a bit of a hack this, but it's needed for COM array access. */ if (hr == DISP_E_BADPARAMCOUNT) return hr; http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_handlers.c?r1=1.28&r2=1.29&ty=u Index: php-src/ext/com_dotnet/com_handlers.c diff -u php-src/ext/com_dotnet/com_handlers.c:1.28 php-src/ext/com_dotnet/com_handlers.c:1.29 --- php-src/ext/com_dotnet/com_handlers.c:1.28 Mon Apr 18 12:38:31 2005 +++ php-src/ext/com_dotnet/com_handlers.c Tue Apr 19 02:14:56 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: com_handlers.c,v 1.28 2005/04/18 16:38:31 wez Exp $ */ +/* $Id: com_handlers.c,v 1.29 2005/04/19 06:14:56 wez Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -49,7 +49,7 @@ convert_to_string_ex(&member); res = php_com_do_invoke(obj, Z_STRVAL_P(member), Z_STRLEN_P(member), - DISPATCH_PROPERTYGET, &v, 0, NULL TSRMLS_CC); + DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, NULL TSRMLS_CC); if (res == SUCCESS) { php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC); @@ -84,30 +84,6 @@ } } -static HRESULT com_get_default_binding(php_com_dotnet_object *obj TSRMLS_DC) -{ - VARDESC *vardesc; - int i; - - if (!obj->typeinfo) { - return FAILURE; - } - - for (i = 0; !obj->have_default_bind; i++) { - if (FAILED(ITypeInfo_GetVarDesc(obj->typeinfo, i, &vardesc))) { - return FAILURE; - } - - if (vardesc->wVarFlags & VARFLAG_FDEFAULTBIND) { - obj->default_bind = (DISPID)vardesc->memid; - obj->have_default_bind = 1; - } - - ITypeInfo_ReleaseVarDesc(obj->typeinfo, vardesc); - } - return obj->have_default_bind ? SUCCESS : FAILURE; -} - static zval *com_read_dimension(zval *object, zval *offset, int type TSRMLS_DC) { zval *return_value; @@ -122,14 +98,9 @@ obj = CDNO_FETCH(object); if (V_VT(&obj->v) == VT_DISPATCH) { - if (!obj->have_default_bind && !com_get_default_binding(obj TSRMLS_CC)) { - php_com_throw_exception(E_INVALIDARG, "this COM object has no default property" TSRMLS_CC); - return return_value; - } - VariantInit(&v); - if (SUCCESS == php_com_do_invoke_by_id(obj, obj->default_bind, + if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 1, &offset TSRMLS_CC)) { php_com_zval_from_variant(return_value, &v, obj->code_page TSRMLS_CC); VariantClear(&v); @@ -163,17 +134,12 @@ obj = CDNO_FETCH(object); if (V_VT(&obj->v) == VT_DISPATCH) { - if (!obj->have_default_bind && !com_get_default_binding(obj TSRMLS_CC)) { - php_com_throw_exception(E_INVALIDARG, "this COM object has no default property" TSRMLS_CC); - return; - } - args[0] = offset; args[1] = value; VariantInit(&v); - if (SUCCESS == php_com_do_invoke_by_id(obj, obj->default_bind, + if (SUCCESS == php_com_do_invoke_by_id(obj, DISPID_VALUE, DISPATCH_METHOD|DISPATCH_PROPERTYPUT, &v, 2, args TSRMLS_CC)) { VariantClear(&v); } @@ -537,11 +503,7 @@ VariantInit(&v); if (V_VT(&obj->v) == VT_DISPATCH) { - if (!obj->have_default_bind && !com_get_default_binding(obj TSRMLS_CC)) { - return FAILURE; - } - - if (FAILURE == php_com_do_invoke_by_id(obj, obj->default_bind, + if (FAILURE == php_com_do_invoke_by_id(obj, DISPID_VALUE, DISPATCH_METHOD|DISPATCH_PROPERTYGET, &v, 0, NULL TSRMLS_CC)) { return FAILURE; } http://cvs.php.net/diff.php/php-src/ext/com_dotnet/com_typeinfo.c?r1=1.5&r2=1.6&ty=u Index: php-src/ext/com_dotnet/com_typeinfo.c diff -u php-src/ext/com_dotnet/com_typeinfo.c:1.5 php-src/ext/com_dotnet/com_typeinfo.c:1.6 --- php-src/ext/com_dotnet/com_typeinfo.c:1.5 Sat Oct 9 09:08:16 2004 +++ php-src/ext/com_dotnet/com_typeinfo.c Tue Apr 19 02:14:56 2005 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: com_typeinfo.c,v 1.5 2004/10/09 13:08:16 wez Exp $ */ +/* $Id: com_typeinfo.c,v 1.6 2005/04/19 06:14:56 wez Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -400,6 +400,7 @@ { VT_VOID, "VT_VOID" }, { VT_PTR, "VT_PTR" }, { VT_HRESULT, "VT_HRESULT" }, + { VT_SAFEARRAY, "VT_SAFEARRAY" }, { 0, NULL } }; http://cvs.php.net/diff.php/php-src/ext/com_dotnet/php_com_dotnet_internal.h?r1=1.12&r2=1.13&ty=u Index: php-src/ext/com_dotnet/php_com_dotnet_internal.h diff -u php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.12 php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.13 --- php-src/ext/com_dotnet/php_com_dotnet_internal.h:1.12 Wed Jun 16 19:57:25 2004 +++ php-src/ext/com_dotnet/php_com_dotnet_internal.h Tue Apr 19 02:14:56 2005 @@ -16,7 +16,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_com_dotnet_internal.h,v 1.12 2004/06/16 23:57:25 abies Exp $ */ +/* $Id: php_com_dotnet_internal.h,v 1.13 2005/04/19 06:14:56 wez Exp $ */ #ifndef PHP_COM_DOTNET_INTERNAL_H #define PHP_COM_DOTNET_INTERNAL_H @@ -37,10 +37,8 @@ ITypeInfo *typeinfo; long code_page; - unsigned int have_default_bind:1; zend_class_entry *ce; - DISPID default_bind; /* default property for array accesses */ /* associated event sink */ IDispatch *sink_dispatch;
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php