summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorHarald Radi <phanto@php.net>2001-05-02 21:51:19 +0000
committerHarald Radi <phanto@php.net>2001-05-02 21:51:19 +0000
commit8dc2dbaf9b1bad044e4f9bfa0fdfb417e4e3e79f (patch)
treec7df07e3f6e184c152fe2822f4a8b2f205afd41b /ext
parent62bec3a7a791179537b3e5c9a3302996c24b560c (diff)
downloadphp-git-8dc2dbaf9b1bad044e4f9bfa0fdfb417e4e3e79f.tar.gz
removed itypeinfo calls because they didn't work on every machine
#i'm investigating this ...
Diffstat (limited to 'ext')
-rw-r--r--ext/com/COM.c22
-rw-r--r--ext/com/com.h2
-rw-r--r--ext/com/conversion.c39
-rw-r--r--ext/com/php_COM.h4
-rw-r--r--ext/rpc/com/com_wrapper.c22
-rw-r--r--ext/rpc/com/com_wrapper.h2
-rw-r--r--ext/rpc/com/conversion.c39
-rw-r--r--ext/rpc/com/php_com.h4
8 files changed, 98 insertions, 36 deletions
diff --git a/ext/com/COM.c b/ext/com/COM.c
index 1526b09e8a..ca26a5c66c 100644
--- a/ext/com/COM.c
+++ b/ext/com/COM.c
@@ -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;
diff --git a/ext/com/com.h b/ext/com/com.h
index f111134eac..c9ab0e4349 100644
--- a/ext/com/com.h
+++ b/ext/com/com.h
@@ -3,7 +3,7 @@
#if PHP_WIN32
-#include "unknwn.h"
+#include "oleauto.h"
typedef struct i_dispatch_ {
int typelib;
diff --git a/ext/com/conversion.c b/ext/com/conversion.c
index 044e142e25..14d5d13ce1 100644
--- a/ext/com/conversion.c
+++ b/ext/com/conversion.c
@@ -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:
diff --git a/ext/com/php_COM.h b/ext/com/php_COM.h
index 8468052393..5a3d1a01bb 100644
--- a/ext/com/php_COM.h
+++ b/ext/com/php_COM.h
@@ -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
diff --git a/ext/rpc/com/com_wrapper.c b/ext/rpc/com/com_wrapper.c
index 1526b09e8a..ca26a5c66c 100644
--- a/ext/rpc/com/com_wrapper.c
+++ b/ext/rpc/com/com_wrapper.c
@@ -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;
diff --git a/ext/rpc/com/com_wrapper.h b/ext/rpc/com/com_wrapper.h
index f111134eac..c9ab0e4349 100644
--- a/ext/rpc/com/com_wrapper.h
+++ b/ext/rpc/com/com_wrapper.h
@@ -3,7 +3,7 @@
#if PHP_WIN32
-#include "unknwn.h"
+#include "oleauto.h"
typedef struct i_dispatch_ {
int typelib;
diff --git a/ext/rpc/com/conversion.c b/ext/rpc/com/conversion.c
index 044e142e25..14d5d13ce1 100644
--- a/ext/rpc/com/conversion.c
+++ b/ext/rpc/com/conversion.c
@@ -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:
diff --git a/ext/rpc/com/php_com.h b/ext/rpc/com/php_com.h
index 8468052393..5a3d1a01bb 100644
--- a/ext/rpc/com/php_com.h
+++ b/ext/rpc/com/php_com.h
@@ -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