]> granicus.if.org Git - php/commitdiff
removed itypeinfo calls because they didn't work on every machine
authorHarald Radi <phanto@php.net>
Wed, 2 May 2001 21:51:19 +0000 (21:51 +0000)
committerHarald Radi <phanto@php.net>
Wed, 2 May 2001 21:51:19 +0000 (21:51 +0000)
#i'm investigating this ...

ext/com/COM.c
ext/com/com.h
ext/com/conversion.c
ext/com/php_COM.h
ext/rpc/com/com_wrapper.c
ext/rpc/com/com_wrapper.h
ext/rpc/com/conversion.c
ext/rpc/com/php_com.h

index 1526b09e8a5f4d65e831a9441e1840c506a16935..ca26a5c66caf79bef69ab14af24ed1de3644377b 100644 (file)
@@ -17,7 +17,6 @@
    +----------------------------------------------------------------------+
  */
 
-
 /*
  * This module implements support for COM components that support the IDispatch
  * interface.  Both local (COM) and remote (DCOM) components can be accessed.
@@ -93,22 +92,27 @@ static int php_COM_load_typelib(char *typelib_name, int mode);
 
 PHPAPI HRESULT php_COM_invoke(i_dispatch *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR*  pDispParams, VARIANT FAR*  pVarResult)
 {
+/* TODO: doesn't work
        if(obj->typelib) {
-               return obj->i.dispatch->lpVtbl->Invoke(obj->i.dispatch, dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
+               return obj->i.typeinfo->lpVtbl->Invoke(obj->i.typeinfo, obj->i.dispatch, dispIdMember,
                                                                                           wFlags, pDispParams, pVarResult, NULL, NULL);
        } else {
-               return obj->i.typeinfo->lpVtbl->Invoke(obj->i.typeinfo, obj->i.dispatch, dispIdMember,
+               return obj->i.dispatch->lpVtbl->Invoke(obj->i.dispatch, dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
+                                                                                          wFlags, pDispParams, pVarResult, NULL, NULL);
+       }*/
+               return obj->i.dispatch->lpVtbl->Invoke(obj->i.dispatch, dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
                                                                                           wFlags, pDispParams, pVarResult, NULL, NULL);
-       }
 }
 
 PHPAPI HRESULT php_COM_get_ids_of_names(i_dispatch *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId)
 {
+/* TODO: doesn't work
        if(obj->typelib) {
-               return obj->i.dispatch->lpVtbl->GetIDsOfNames(obj->i.dispatch, &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
-       } else {
                return obj->i.typeinfo->lpVtbl->GetIDsOfNames(obj->i.typeinfo, rgszNames, 1, rgDispId);
-       }
+       } else {
+               return obj->i.dispatch->lpVtbl->GetIDsOfNames(obj->i.dispatch, &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
+       }*/
+               return obj->i.dispatch->lpVtbl->GetIDsOfNames(obj->i.dispatch, &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
 }
 
 PHPAPI HRESULT php_COM_release(i_dispatch *obj)
@@ -128,7 +132,7 @@ PHPAPI HRESULT php_COM_set(i_dispatch *obj, IDispatch FAR* pDisp, int cleanup)
        HRESULT hr;
 
        obj->i.dispatch = pDisp;
-       obj->typelib = !FAILED(obj->i.dispatch->lpVtbl->GetTypeInfo(obj->i.dispatch, 0, LANG_NEUTRAL, &obj->i.typeinfo));
+       obj->typelib = !FAILED(obj->i.dispatch->lpVtbl->GetTypeInfo(obj->i.dispatch, 0, LANG_NEUTRAL, &(obj->i.typeinfo)));
 
        if(cleanup) {
                pDisp = NULL;
@@ -701,7 +705,7 @@ VARIANT *_php_COM_get_property_handler(zend_property_reference *property_referen
                                break;
 
                        case OE_IS_METHOD:
-                               var_result->pdispVal = obj_prop->i.dispatch;
+//                             var_result->pdispVal = obj_prop->i.dispatch;
                                efree(obj_prop);
                                return var_result;
                                break;
index f111134eac4a63f9248c3a5555d05edcd87530f2..c9ab0e4349f3f50c7462071c99075e9c3c467f76 100644 (file)
@@ -3,7 +3,7 @@
 
 #if PHP_WIN32
 
-#include "unknwn.h"
+#include "oleauto.h"
 
 typedef struct i_dispatch_ {
        int typelib;
index 044e142e2543350203ceb4ead1e1a09ce36578ca..14d5d13ce1d90ba01df493ab8d88e8be47c9982e 100644 (file)
@@ -1,3 +1,21 @@
+/*
+   +----------------------------------------------------------------------+
+   | PHP version 4.0                                                      |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2001 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 2.02 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available at through the world-wide-web at                           |
+   | http://www.php.net/license/2_02.txt.                                 |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author: Harald Radi <h.radi@nme.at>                                  |
+   +----------------------------------------------------------------------+
+ */
+
 #ifdef PHP_WIN32
 
 #include "php.h"
@@ -43,22 +61,22 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage)
          else if(!strcmp(pval_arg->value.obj.ce->name, "COM"))
          {
             pval **idispatch_handle;
-            IDispatch *i_dispatch;
+            i_dispatch *obj;
             int type;
 
             /* fetch the IDispatch interface */
             zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &idispatch_handle);
-            i_dispatch = (IDispatch *)zend_list_find((*idispatch_handle)->value.lval, &type);
-            if (!i_dispatch || (type != php_COM_get_le_idispatch()))
+            obj = (i_dispatch *)zend_list_find((*idispatch_handle)->value.lval, &type);
+            if (!obj || (type != php_COM_get_le_idispatch()))
                var_arg->vt = VT_EMPTY;
             else
             {
-               var_arg->vt = VT_DISPATCH;
-               var_arg->pdispVal = i_dispatch;
+                               var_arg->vt = VT_DISPATCH;
+                               var_arg->pdispVal = obj->i.dispatch;
             }
          }
          else
-            var_arg->vt = VT_DISPATCH;
+            var_arg->vt = VT_EMPTY;
          break;
 
       case IS_RESOURCE:
@@ -488,6 +506,7 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent
          break;
       case VT_DISPATCH: {
             pval *handle;
+                       i_dispatch *obj;
 
             pval_arg->type=IS_OBJECT;
             pval_arg->value.obj.ce = &com_class_entry;
@@ -497,15 +516,19 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent
             zend_hash_init(pval_arg->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
 
             ALLOC_ZVAL(handle);
+                       obj = emalloc(sizeof(i_dispatch));
+                       php_COM_set(obj, var_arg->pdispVal, TRUE);
+
             handle->type = IS_LONG;
-             handle->value.lval = zend_list_insert(var_arg->pdispVal, php_COM_get_le_idispatch());
+                       handle->value.lval = zend_list_insert(obj, php_COM_get_le_idispatch());
             pval_copy_constructor(handle);
             INIT_PZVAL(handle);
             zend_hash_index_update(pval_arg->value.obj.properties, 0, &handle, sizeof(pval *), NULL);
          }
          break;
       case VT_UNKNOWN:
-         var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal);
+//wtf ??
+                 var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal);
          /* break missing intentionally */
 
       case VT_I1:
index 84680523937356e6b460528f98433f29b8391206..5a3d1a01bb2e8dc027e6648e567510e20fdf6d32 100644 (file)
@@ -3,6 +3,8 @@
 
 #if PHP_WIN32
 
+BEGIN_EXTERN_C()
+
 #include "com.h"
 
 extern PHP_MINIT_FUNCTION(COM);
@@ -18,6 +20,8 @@ extern int php_COM_set_property_handler(zend_property_reference *property_refere
 extern char *php_COM_error_message(HRESULT hr);
 extern void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
 
+END_EXTERN_C()
+
 #define COM_module_ptr &COM_module_entry
 
 #else
index 1526b09e8a5f4d65e831a9441e1840c506a16935..ca26a5c66caf79bef69ab14af24ed1de3644377b 100644 (file)
@@ -17,7 +17,6 @@
    +----------------------------------------------------------------------+
  */
 
-
 /*
  * This module implements support for COM components that support the IDispatch
  * interface.  Both local (COM) and remote (DCOM) components can be accessed.
@@ -93,22 +92,27 @@ static int php_COM_load_typelib(char *typelib_name, int mode);
 
 PHPAPI HRESULT php_COM_invoke(i_dispatch *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR*  pDispParams, VARIANT FAR*  pVarResult)
 {
+/* TODO: doesn't work
        if(obj->typelib) {
-               return obj->i.dispatch->lpVtbl->Invoke(obj->i.dispatch, dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
+               return obj->i.typeinfo->lpVtbl->Invoke(obj->i.typeinfo, obj->i.dispatch, dispIdMember,
                                                                                           wFlags, pDispParams, pVarResult, NULL, NULL);
        } else {
-               return obj->i.typeinfo->lpVtbl->Invoke(obj->i.typeinfo, obj->i.dispatch, dispIdMember,
+               return obj->i.dispatch->lpVtbl->Invoke(obj->i.dispatch, dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
+                                                                                          wFlags, pDispParams, pVarResult, NULL, NULL);
+       }*/
+               return obj->i.dispatch->lpVtbl->Invoke(obj->i.dispatch, dispIdMember, &IID_NULL, LOCALE_SYSTEM_DEFAULT,
                                                                                           wFlags, pDispParams, pVarResult, NULL, NULL);
-       }
 }
 
 PHPAPI HRESULT php_COM_get_ids_of_names(i_dispatch *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId)
 {
+/* TODO: doesn't work
        if(obj->typelib) {
-               return obj->i.dispatch->lpVtbl->GetIDsOfNames(obj->i.dispatch, &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
-       } else {
                return obj->i.typeinfo->lpVtbl->GetIDsOfNames(obj->i.typeinfo, rgszNames, 1, rgDispId);
-       }
+       } else {
+               return obj->i.dispatch->lpVtbl->GetIDsOfNames(obj->i.dispatch, &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
+       }*/
+               return obj->i.dispatch->lpVtbl->GetIDsOfNames(obj->i.dispatch, &IID_NULL, rgszNames, 1, LOCALE_SYSTEM_DEFAULT, rgDispId);
 }
 
 PHPAPI HRESULT php_COM_release(i_dispatch *obj)
@@ -128,7 +132,7 @@ PHPAPI HRESULT php_COM_set(i_dispatch *obj, IDispatch FAR* pDisp, int cleanup)
        HRESULT hr;
 
        obj->i.dispatch = pDisp;
-       obj->typelib = !FAILED(obj->i.dispatch->lpVtbl->GetTypeInfo(obj->i.dispatch, 0, LANG_NEUTRAL, &obj->i.typeinfo));
+       obj->typelib = !FAILED(obj->i.dispatch->lpVtbl->GetTypeInfo(obj->i.dispatch, 0, LANG_NEUTRAL, &(obj->i.typeinfo)));
 
        if(cleanup) {
                pDisp = NULL;
@@ -701,7 +705,7 @@ VARIANT *_php_COM_get_property_handler(zend_property_reference *property_referen
                                break;
 
                        case OE_IS_METHOD:
-                               var_result->pdispVal = obj_prop->i.dispatch;
+//                             var_result->pdispVal = obj_prop->i.dispatch;
                                efree(obj_prop);
                                return var_result;
                                break;
index f111134eac4a63f9248c3a5555d05edcd87530f2..c9ab0e4349f3f50c7462071c99075e9c3c467f76 100644 (file)
@@ -3,7 +3,7 @@
 
 #if PHP_WIN32
 
-#include "unknwn.h"
+#include "oleauto.h"
 
 typedef struct i_dispatch_ {
        int typelib;
index 044e142e2543350203ceb4ead1e1a09ce36578ca..14d5d13ce1d90ba01df493ab8d88e8be47c9982e 100644 (file)
@@ -1,3 +1,21 @@
+/*
+   +----------------------------------------------------------------------+
+   | PHP version 4.0                                                      |
+   +----------------------------------------------------------------------+
+   | Copyright (c) 1997-2001 The PHP Group                                |
+   +----------------------------------------------------------------------+
+   | This source file is subject to version 2.02 of the PHP license,      |
+   | that is bundled with this package in the file LICENSE, and is        |
+   | available at through the world-wide-web at                           |
+   | http://www.php.net/license/2_02.txt.                                 |
+   | If you did not receive a copy of the PHP license and are unable to   |
+   | obtain it through the world-wide-web, please send a note to          |
+   | license@php.net so we can mail you a copy immediately.               |
+   +----------------------------------------------------------------------+
+   | Author: Harald Radi <h.radi@nme.at>                                  |
+   +----------------------------------------------------------------------+
+ */
+
 #ifdef PHP_WIN32
 
 #include "php.h"
@@ -43,22 +61,22 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg, int codepage)
          else if(!strcmp(pval_arg->value.obj.ce->name, "COM"))
          {
             pval **idispatch_handle;
-            IDispatch *i_dispatch;
+            i_dispatch *obj;
             int type;
 
             /* fetch the IDispatch interface */
             zend_hash_index_find(pval_arg->value.obj.properties, 0, (void **) &idispatch_handle);
-            i_dispatch = (IDispatch *)zend_list_find((*idispatch_handle)->value.lval, &type);
-            if (!i_dispatch || (type != php_COM_get_le_idispatch()))
+            obj = (i_dispatch *)zend_list_find((*idispatch_handle)->value.lval, &type);
+            if (!obj || (type != php_COM_get_le_idispatch()))
                var_arg->vt = VT_EMPTY;
             else
             {
-               var_arg->vt = VT_DISPATCH;
-               var_arg->pdispVal = i_dispatch;
+                               var_arg->vt = VT_DISPATCH;
+                               var_arg->pdispVal = obj->i.dispatch;
             }
          }
          else
-            var_arg->vt = VT_DISPATCH;
+            var_arg->vt = VT_EMPTY;
          break;
 
       case IS_RESOURCE:
@@ -488,6 +506,7 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent
          break;
       case VT_DISPATCH: {
             pval *handle;
+                       i_dispatch *obj;
 
             pval_arg->type=IS_OBJECT;
             pval_arg->value.obj.ce = &com_class_entry;
@@ -497,15 +516,19 @@ PHPAPI void php_variant_to_pval(VARIANT *var_arg, pval *pval_arg, int persistent
             zend_hash_init(pval_arg->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0);
 
             ALLOC_ZVAL(handle);
+                       obj = emalloc(sizeof(i_dispatch));
+                       php_COM_set(obj, var_arg->pdispVal, TRUE);
+
             handle->type = IS_LONG;
-             handle->value.lval = zend_list_insert(var_arg->pdispVal, php_COM_get_le_idispatch());
+                       handle->value.lval = zend_list_insert(obj, php_COM_get_le_idispatch());
             pval_copy_constructor(handle);
             INIT_PZVAL(handle);
             zend_hash_index_update(pval_arg->value.obj.properties, 0, &handle, sizeof(pval *), NULL);
          }
          break;
       case VT_UNKNOWN:
-         var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal);
+//wtf ??
+                 var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal);
          /* break missing intentionally */
 
       case VT_I1:
index 84680523937356e6b460528f98433f29b8391206..5a3d1a01bb2e8dc027e6648e567510e20fdf6d32 100644 (file)
@@ -3,6 +3,8 @@
 
 #if PHP_WIN32
 
+BEGIN_EXTERN_C()
+
 #include "com.h"
 
 extern PHP_MINIT_FUNCTION(COM);
@@ -18,6 +20,8 @@ extern int php_COM_set_property_handler(zend_property_reference *property_refere
 extern char *php_COM_error_message(HRESULT hr);
 extern void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
 
+END_EXTERN_C()
+
 #define COM_module_ptr &COM_module_entry
 
 #else