summaryrefslogtreecommitdiff
path: root/ext/rpc
diff options
context:
space:
mode:
authorZeev Suraski <zeev@php.net>2000-04-10 21:54:15 +0000
committerZeev Suraski <zeev@php.net>2000-04-10 21:54:15 +0000
commit09ac924559763d6974e9248cf0ffbd4ac04107bc (patch)
tree0ec36dcbeeeeb76d80ed2d4b6bfc6dcb9a3ed29d /ext/rpc
parent578726ca2f4e450f2048587f3de5725a69c1f301 (diff)
downloadphp-git-09ac924559763d6974e9248cf0ffbd4ac04107bc.tar.gz
- Added support for reading properties that require arguments in the COM
module - writing to them will only be supported in PHP 4.1 (Zeev)
Diffstat (limited to 'ext/rpc')
-rw-r--r--ext/rpc/com/COM.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/ext/rpc/com/COM.c b/ext/rpc/com/COM.c
index 21951e3de7..06a656516e 100644
--- a/ext/rpc/com/COM.c
+++ b/ext/rpc/com/COM.c
@@ -220,7 +220,7 @@ PHP_INI_END()
PHP_MINIT_FUNCTION(COM)
{
CoInitialize(NULL);
- le_idispatch = register_list_destructors(php_idispatch_destructor,NULL);
+ le_idispatch = register_list_destructors(php_idispatch_destructor, NULL);
php_register_COM_class();
REGISTER_INI_ENTRIES();
return SUCCESS;
@@ -507,7 +507,7 @@ int do_COM_invoke(IDispatch *i_dispatch, pval *function_name, VARIANTARG *var_re
dispparams.cNamedArgs = 0;
hr = i_dispatch->lpVtbl->Invoke(i_dispatch, dispid, &IID_NULL,
- LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD,
+ LOCALE_SYSTEM_DEFAULT, DISPATCH_METHOD|DISPATCH_PROPERTYGET,
&dispparams, var_result, NULL, 0);
if (FAILED(hr)) {
@@ -773,7 +773,8 @@ VARIANTARG _php_COM_get_property_handler(zend_property_reference *property_refer
zend_hash_index_find(object->value.obj.properties, 0, (void **) &idispatch_handle);
i_dispatch = zend_list_find((*idispatch_handle)->value.lval,&type);
if (!i_dispatch || (type!=le_idispatch)) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
}
var_result.vt = VT_DISPATCH;
@@ -784,16 +785,19 @@ VARIANTARG _php_COM_get_property_handler(zend_property_reference *property_refer
switch (overloaded_property->type) {
case OE_IS_ARRAY:
if (do_COM_offget(&var_result, &var_result, &overloaded_property->element, element!=property_reference->elements_list->head)==FAILURE) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
}
/*printf("Array offset: ");*/
break;
case OE_IS_OBJECT:
if (var_result.vt != VT_DISPATCH) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
} else {
if (do_COM_propget(&var_result, var_result.pdispVal, &overloaded_property->element, element!=property_reference->elements_list->head)==FAILURE) {
- /* bail out */
+ var_result.vt = VT_EMPTY;
+ return var_result;
}
/*printf("Object property: ");*/
}
@@ -844,7 +848,7 @@ int php_COM_set_property_handler(zend_property_reference *property_reference, pv
zend_hash_index_find(object->value.obj.properties, 0, (void **) &idispatch_handle);
i_dispatch = zend_list_find((*idispatch_handle)->value.lval,&type);
if (!i_dispatch || (type!=le_idispatch)) {
- /* bail out */
+ return FAILURE;
}
var_result.vt = VT_DISPATCH;
var_result.pdispVal = i_dispatch;
@@ -857,7 +861,7 @@ int php_COM_set_property_handler(zend_property_reference *property_reference, pv
break;
case OE_IS_OBJECT:
if (var_result.vt != VT_DISPATCH) {
- /* bail out */
+ return FAILURE;
} else {
do_COM_propget(&var_result, i_dispatch, &overloaded_property->element, element!=property_reference->elements_list->head);
/*printf("Object property: ");*/