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

Reply via email to