cvs: php4 /ext/com COM.c com.h conversion.c php_COM.h
| From: | Harald Radi | 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;