cvs: php4 /ext/com COM.c com.h conversion.c php_COM.h

From: Date: Wed, 02 May 2001 21:51:18 +0000
Subject: cvs: php4 /ext/com COM.c com.h conversion.c php_COM.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-5469@lists.php.net to get a copy of this message
phanto Wed May 2 14:51:18 2001 EDT Modified files: /php4/ext/com php_COM.h conversion.c com.h COM.c Log: removed itypeinfo calls because they didn't work on every machine #i'm investigating this ... Index: php4/ext/com/php_COM.h diff -u php4/ext/com/php_COM.h:1.5 php4/ext/com/php_COM.h:1.6 --- php4/ext/com/php_COM.h:1.5 Tue Mar 20 14:35:28 2001 +++ php4/ext/com/php_COM.h Wed May 2 14:51:18 2001 @@ -3,6 +3,8 @@ #if PHP_WIN32 +BEGIN_EXTERN_C() + #include "com.h" extern PHP_MINIT_FUNCTION(COM); @@ -17,6 +19,8 @@ extern int php_COM_set_property_handler(zend_property_reference *property_reference, pval *value); 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 Index: php4/ext/com/conversion.c diff -u php4/ext/com/conversion.c:1.7 php4/ext/com/conversion.c:1.8 --- php4/ext/com/conversion.c:1.7 Sun Feb 18 08:49:58 2001 +++ php4/ext/com/conversion.c Wed May 2 14:51:18 2001 @@ -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 @@ 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 @@ 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 @@ 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: php4/ext/com/com.h diff -u php4/ext/com/com.h:1.1 php4/ext/com/com.h:1.2 --- php4/ext/com/com.h:1.1 Tue Mar 20 14:35:28 2001 +++ php4/ext/com/com.h Wed May 2 14:51:18 2001 @@ -3,7 +3,7 @@ #if PHP_WIN32 -#include "unknwn.h" +#include "oleauto.h" typedef struct i_dispatch_ { int typelib; Index: php4/ext/com/COM.c diff -u php4/ext/com/COM.c:1.8 php4/ext/com/COM.c:1.9 --- php4/ext/com/COM.c:1.8 Mon Apr 30 05:43:30 2001 +++ php4/ext/com/COM.c Wed May 2 14:51:18 2001 @@ -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 @@ 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 @@ 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 @@ 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;

« previous php.cvs (#5469) next »