pass another com object as parameter

This commit is contained in:
Harald Radi 2001-01-30 02:09:39 +00:00
parent 608678bbfa
commit 79a39e3d39
4 changed files with 156 additions and 122 deletions

View file

@ -145,7 +145,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc
break; break;
case OE_IS_OBJECT: case OE_IS_OBJECT:
if(strstr(overloaded_property->element.value.str.val, "value")) if(!strcmp(overloaded_property->element.value.str.val, "value"))
php_variant_to_pval(var_arg, &result, 0); php_variant_to_pval(var_arg, &result, 0);
else else
{ {
@ -192,197 +192,197 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value)
type.type = IS_STRING; type.type = IS_STRING;
if(strstr(arg_property->value.str.val, "bVal")) if(!strcmp(arg_property->value.str.val, "bVal"))
{ {
type.value.str.val = "VT_UI1"; type.value.str.val = "VT_UI1";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "iVal")) else if(!strcmp(arg_property->value.str.val, "iVal"))
{ {
type.value.str.val = "VT_I2"; type.value.str.val = "VT_I2";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "lVal")) else if(!strcmp(arg_property->value.str.val, "lVal"))
{ {
type.value.str.val = "VT_I4"; type.value.str.val = "VT_I4";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "fltVal")) else if(!strcmp(arg_property->value.str.val, "fltVal"))
{ {
type.value.str.val = "VT_R4"; type.value.str.val = "VT_R4";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "dblVal")) else if(!strcmp(arg_property->value.str.val, "dblVal"))
{ {
type.value.str.val = "VT_R8"; type.value.str.val = "VT_R8";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "boolVal")) else if(!strcmp(arg_property->value.str.val, "boolVal"))
{ {
type.value.str.val = "VT_BOOL"; type.value.str.val = "VT_BOOL";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "scode")) else if(!strcmp(arg_property->value.str.val, "scode"))
{ {
type.value.str.val = "VT_ERROR"; type.value.str.val = "VT_ERROR";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "cyVal")) else if(!strcmp(arg_property->value.str.val, "cyVal"))
{ {
type.value.str.val = "VT_CY"; type.value.str.val = "VT_CY";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "date")) else if(!strcmp(arg_property->value.str.val, "date"))
{ {
type.value.str.val = "VT_DATE"; type.value.str.val = "VT_DATE";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "bstrVal")) else if(!strcmp(arg_property->value.str.val, "bstrVal"))
{ {
type.value.str.val = "VT_BSTR"; type.value.str.val = "VT_BSTR";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdecVal")) else if(!strcmp(arg_property->value.str.val, "pdecVal"))
{ {
type.value.str.val = "VT_DECIMAL|VT_BYREF"; type.value.str.val = "VT_DECIMAL|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "punkVal")) else if(!strcmp(arg_property->value.str.val, "punkVal"))
{ {
type.value.str.val = "VT_UNKNOWN"; type.value.str.val = "VT_UNKNOWN";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdispVal")) else if(!strcmp(arg_property->value.str.val, "pdispVal"))
{ {
type.value.str.val = "VT_DISPATCH"; type.value.str.val = "VT_DISPATCH";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "parray")) else if(!strcmp(arg_property->value.str.val, "parray"))
{ {
type.value.str.val = "VT_ARRAY"; type.value.str.val = "VT_ARRAY";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pbVal")) else if(!strcmp(arg_property->value.str.val, "pbVal"))
{ {
type.value.str.val = "VT_UI1|VT_BYREF"; type.value.str.val = "VT_UI1|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "piVal")) else if(!strcmp(arg_property->value.str.val, "piVal"))
{ {
type.value.str.val = "VT_I2|VT_BYREF"; type.value.str.val = "VT_I2|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "plVal")) else if(!strcmp(arg_property->value.str.val, "plVal"))
{ {
type.value.str.val = "VT_I4|VT_BYREF"; type.value.str.val = "VT_I4|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pfltVal")) else if(!strcmp(arg_property->value.str.val, "pfltVal"))
{ {
type.value.str.val = "VT_R4|VT_BYREF"; type.value.str.val = "VT_R4|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdblVal")) else if(!strcmp(arg_property->value.str.val, "pdblVal"))
{ {
type.value.str.val = "VT_R8|VT_BYREF"; type.value.str.val = "VT_R8|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pboolVal")) else if(!strcmp(arg_property->value.str.val, "pboolVal"))
{ {
type.value.str.val = "VT_BOOL|VT_BYREF"; type.value.str.val = "VT_BOOL|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pscode")) else if(!strcmp(arg_property->value.str.val, "pscode"))
{ {
type.value.str.val = "VT_ERROR|VT_BYREF"; type.value.str.val = "VT_ERROR|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pcyVal")) else if(!strcmp(arg_property->value.str.val, "pcyVal"))
{ {
type.value.str.val = "VT_CY|VT_BYREF"; type.value.str.val = "VT_CY|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdate")) else if(!strcmp(arg_property->value.str.val, "pdate"))
{ {
type.value.str.val = "VT_DATE|VT_BYREF"; type.value.str.val = "VT_DATE|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pbstrVal")) else if(!strcmp(arg_property->value.str.val, "pbstrVal"))
{ {
type.value.str.val = "VT_BSTR|VT_BYREF"; type.value.str.val = "VT_BSTR|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "ppunkVal")) else if(!strcmp(arg_property->value.str.val, "ppunkVal"))
{ {
type.value.str.val = "VT_UNKNOWN|VT_BYREF"; type.value.str.val = "VT_UNKNOWN|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "ppdispVal")) else if(!strcmp(arg_property->value.str.val, "ppdispVal"))
{ {
type.value.str.val = "VT_DISPATCH|VT_BYREF"; type.value.str.val = "VT_DISPATCH|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pparray")) else if(!strcmp(arg_property->value.str.val, "pparray"))
{ {
type.value.str.val = "VT_ARRAY|VT_BYREF"; type.value.str.val = "VT_ARRAY|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pvarVal")) else if(!strcmp(arg_property->value.str.val, "pvarVal"))
{ {
type.value.str.val = "VT_VARIANT|VT_BYREF"; type.value.str.val = "VT_VARIANT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "byref")) else if(!strcmp(arg_property->value.str.val, "byref"))
{ {
type.value.str.val = "VT_BYREF"; type.value.str.val = "VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "cVal")) else if(!strcmp(arg_property->value.str.val, "cVal"))
{ {
type.value.str.val = "VT_I1"; type.value.str.val = "VT_I1";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "uiVal")) else if(!strcmp(arg_property->value.str.val, "uiVal"))
{ {
type.value.str.val = "VT_UI2"; type.value.str.val = "VT_UI2";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "ulVal")) else if(!strcmp(arg_property->value.str.val, "ulVal"))
{ {
type.value.str.val = "VT_UI4"; type.value.str.val = "VT_UI4";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "intVal")) else if(!strcmp(arg_property->value.str.val, "intVal"))
{ {
type.value.str.val = "VT_INT"; type.value.str.val = "VT_INT";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "uintVal")) else if(!strcmp(arg_property->value.str.val, "uintVal"))
{ {
type.value.str.val = "VT_UINT|VT_BYREF"; type.value.str.val = "VT_UINT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pcVal")) else if(!strcmp(arg_property->value.str.val, "pcVal"))
{ {
type.value.str.val = "VT_I1|VT_BYREF"; type.value.str.val = "VT_I1|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "puiVal")) else if(!strcmp(arg_property->value.str.val, "puiVal"))
{ {
type.value.str.val = "VT_UI2|VT_BYREF"; type.value.str.val = "VT_UI2|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pulVal")) else if(!strcmp(arg_property->value.str.val, "pulVal"))
{ {
type.value.str.val = "VT_UI4|VT_BYREF"; type.value.str.val = "VT_UI4|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pintVal")) else if(!strcmp(arg_property->value.str.val, "pintVal"))
{ {
type.value.str.val = "VT_INT|VT_BYREF"; type.value.str.val = "VT_INT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "puintVal")) else if(!strcmp(arg_property->value.str.val, "puintVal"))
{ {
type.value.str.val = "VT_UINT|VT_BYREF"; type.value.str.val = "VT_UINT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);

View file

@ -35,7 +35,7 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg)
break; break;
case IS_OBJECT: case IS_OBJECT:
if(strstr(pval_arg->value.obj.ce->name, "VARIANT")) if(!strcmp(pval_arg->value.obj.ce->name, "VARIANT"))
{ {
int type; int type;
pval **var_handle; pval **var_handle;
@ -45,6 +45,23 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg)
var_arg->pvarVal = (VARIANT FAR*) zend_list_find((*var_handle)->value.lval, &type); var_arg->pvarVal = (VARIANT FAR*) zend_list_find((*var_handle)->value.lval, &type);
var_arg->vt = VT_VARIANT|VT_BYREF; var_arg->vt = VT_VARIANT|VT_BYREF;
} }
else if(!strcmp(pval_arg->value.obj.ce->name, "COM"))
{
pval **idispatch_handle;
IDispatch *i_dispatch;
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()))
var_arg->vt = VT_EMPTY;
else
{
var_arg->vt = VT_DISPATCH;
var_arg->pdispVal = i_dispatch;
}
}
break; break;
case IS_RESOURCE: case IS_RESOURCE:
@ -84,49 +101,49 @@ PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_
OLECHAR *unicode_str; OLECHAR *unicode_str;
// set type // set type
if(strstr(pval_type->value.str.val, "VT_UI1")) if(!strcmp(pval_type->value.str.val, "VT_UI1"))
var_arg->vt = VT_UI1; var_arg->vt = VT_UI1;
else if(strstr(pval_type->value.str.val, "VT_I2")) else if(!strcmp(pval_type->value.str.val, "VT_I2"))
var_arg->vt = VT_I4; var_arg->vt = VT_I4;
else if(strstr(pval_type->value.str.val, "VT_R4")) else if(!strcmp(pval_type->value.str.val, "VT_R4"))
var_arg->vt = VT_R4; var_arg->vt = VT_R4;
else if(strstr(pval_type->value.str.val, "VT_R8")) else if(!strcmp(pval_type->value.str.val, "VT_R8"))
var_arg->vt = VT_R8; var_arg->vt = VT_R8;
else if(strstr(pval_type->value.str.val, "VT_BOOL")) else if(!strcmp(pval_type->value.str.val, "VT_BOOL"))
var_arg->vt = VT_BOOL; var_arg->vt = VT_BOOL;
else if(strstr(pval_type->value.str.val, "VT_ERROR")) else if(!strcmp(pval_type->value.str.val, "VT_ERROR"))
var_arg->vt = VT_ERROR; var_arg->vt = VT_ERROR;
else if(strstr(pval_type->value.str.val, "VT_CY")) else if(!strcmp(pval_type->value.str.val, "VT_CY"))
var_arg->vt = VT_CY; var_arg->vt = VT_CY;
else if(strstr(pval_type->value.str.val, "VT_DATE")) else if(!strcmp(pval_type->value.str.val, "VT_DATE"))
var_arg->vt = VT_DATE; var_arg->vt = VT_DATE;
else if(strstr(pval_type->value.str.val, "VT_BSTR")) else if(!strcmp(pval_type->value.str.val, "VT_BSTR"))
var_arg->vt = VT_BSTR; var_arg->vt = VT_BSTR;
else if(strstr(pval_type->value.str.val, "VT_DECIMAL")) else if(!strcmp(pval_type->value.str.val, "VT_DECIMAL"))
var_arg->vt = VT_DECIMAL; var_arg->vt = VT_DECIMAL;
else if(strstr(pval_type->value.str.val, "VT_UNKNOWN")) else if(!strcmp(pval_type->value.str.val, "VT_UNKNOWN"))
var_arg->vt = VT_UNKNOWN; var_arg->vt = VT_UNKNOWN;
else if(strstr(pval_type->value.str.val, "VT_DISPATCH")) else if(!strcmp(pval_type->value.str.val, "VT_DISPATCH"))
var_arg->vt = VT_DISPATCH; var_arg->vt = VT_DISPATCH;
else if(strstr(pval_type->value.str.val, "VT_VARIANT")) else if(!strcmp(pval_type->value.str.val, "VT_VARIANT"))
var_arg->vt = VT_VARIANT; var_arg->vt = VT_VARIANT;
else if(strstr(pval_type->value.str.val, "VT_I1")) else if(!strcmp(pval_type->value.str.val, "VT_I1"))
var_arg->vt = VT_I1; var_arg->vt = VT_I1;
else if(strstr(pval_type->value.str.val, "VT_UI2")) else if(!strcmp(pval_type->value.str.val, "VT_UI2"))
var_arg->vt = VT_UI2; var_arg->vt = VT_UI2;
else if(strstr(pval_type->value.str.val, "VT_UI4")) else if(!strcmp(pval_type->value.str.val, "VT_UI4"))
var_arg->vt = VT_UI4; var_arg->vt = VT_UI4;
else if(strstr(pval_type->value.str.val, "VT_INT")) else if(!strcmp(pval_type->value.str.val, "VT_INT"))
var_arg->vt = VT_INT; var_arg->vt = VT_INT;
else if(strstr(pval_type->value.str.val, "VT_UINT")) else if(!strcmp(pval_type->value.str.val, "VT_UINT"))
var_arg->vt = VT_UINT; var_arg->vt = VT_UINT;
// is safearray // is safearray
if(strstr(pval_type->value.str.val, "VT_ARRAY")) if(!strcmp(pval_type->value.str.val, "VT_ARRAY"))
var_arg->vt |= VT_ARRAY; var_arg->vt |= VT_ARRAY;
// by reference // by reference
if(strstr(pval_type->value.str.val, "VT_BYREF")) if(!strcmp(pval_type->value.str.val, "VT_BYREF"))
var_arg->vt |= VT_BYREF; var_arg->vt |= VT_BYREF;
switch(var_arg->vt) switch(var_arg->vt)

View file

@ -35,7 +35,7 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg)
break; break;
case IS_OBJECT: case IS_OBJECT:
if(strstr(pval_arg->value.obj.ce->name, "VARIANT")) if(!strcmp(pval_arg->value.obj.ce->name, "VARIANT"))
{ {
int type; int type;
pval **var_handle; pval **var_handle;
@ -45,6 +45,23 @@ PHPAPI void php_pval_to_variant(pval *pval_arg, VARIANT *var_arg)
var_arg->pvarVal = (VARIANT FAR*) zend_list_find((*var_handle)->value.lval, &type); var_arg->pvarVal = (VARIANT FAR*) zend_list_find((*var_handle)->value.lval, &type);
var_arg->vt = VT_VARIANT|VT_BYREF; var_arg->vt = VT_VARIANT|VT_BYREF;
} }
else if(!strcmp(pval_arg->value.obj.ce->name, "COM"))
{
pval **idispatch_handle;
IDispatch *i_dispatch;
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()))
var_arg->vt = VT_EMPTY;
else
{
var_arg->vt = VT_DISPATCH;
var_arg->pdispVal = i_dispatch;
}
}
break; break;
case IS_RESOURCE: case IS_RESOURCE:
@ -84,49 +101,49 @@ PHPAPI void php_pval_to_variant_ex(pval *pval_arg, VARIANT *var_arg, pval *pval_
OLECHAR *unicode_str; OLECHAR *unicode_str;
// set type // set type
if(strstr(pval_type->value.str.val, "VT_UI1")) if(!strcmp(pval_type->value.str.val, "VT_UI1"))
var_arg->vt = VT_UI1; var_arg->vt = VT_UI1;
else if(strstr(pval_type->value.str.val, "VT_I2")) else if(!strcmp(pval_type->value.str.val, "VT_I2"))
var_arg->vt = VT_I4; var_arg->vt = VT_I4;
else if(strstr(pval_type->value.str.val, "VT_R4")) else if(!strcmp(pval_type->value.str.val, "VT_R4"))
var_arg->vt = VT_R4; var_arg->vt = VT_R4;
else if(strstr(pval_type->value.str.val, "VT_R8")) else if(!strcmp(pval_type->value.str.val, "VT_R8"))
var_arg->vt = VT_R8; var_arg->vt = VT_R8;
else if(strstr(pval_type->value.str.val, "VT_BOOL")) else if(!strcmp(pval_type->value.str.val, "VT_BOOL"))
var_arg->vt = VT_BOOL; var_arg->vt = VT_BOOL;
else if(strstr(pval_type->value.str.val, "VT_ERROR")) else if(!strcmp(pval_type->value.str.val, "VT_ERROR"))
var_arg->vt = VT_ERROR; var_arg->vt = VT_ERROR;
else if(strstr(pval_type->value.str.val, "VT_CY")) else if(!strcmp(pval_type->value.str.val, "VT_CY"))
var_arg->vt = VT_CY; var_arg->vt = VT_CY;
else if(strstr(pval_type->value.str.val, "VT_DATE")) else if(!strcmp(pval_type->value.str.val, "VT_DATE"))
var_arg->vt = VT_DATE; var_arg->vt = VT_DATE;
else if(strstr(pval_type->value.str.val, "VT_BSTR")) else if(!strcmp(pval_type->value.str.val, "VT_BSTR"))
var_arg->vt = VT_BSTR; var_arg->vt = VT_BSTR;
else if(strstr(pval_type->value.str.val, "VT_DECIMAL")) else if(!strcmp(pval_type->value.str.val, "VT_DECIMAL"))
var_arg->vt = VT_DECIMAL; var_arg->vt = VT_DECIMAL;
else if(strstr(pval_type->value.str.val, "VT_UNKNOWN")) else if(!strcmp(pval_type->value.str.val, "VT_UNKNOWN"))
var_arg->vt = VT_UNKNOWN; var_arg->vt = VT_UNKNOWN;
else if(strstr(pval_type->value.str.val, "VT_DISPATCH")) else if(!strcmp(pval_type->value.str.val, "VT_DISPATCH"))
var_arg->vt = VT_DISPATCH; var_arg->vt = VT_DISPATCH;
else if(strstr(pval_type->value.str.val, "VT_VARIANT")) else if(!strcmp(pval_type->value.str.val, "VT_VARIANT"))
var_arg->vt = VT_VARIANT; var_arg->vt = VT_VARIANT;
else if(strstr(pval_type->value.str.val, "VT_I1")) else if(!strcmp(pval_type->value.str.val, "VT_I1"))
var_arg->vt = VT_I1; var_arg->vt = VT_I1;
else if(strstr(pval_type->value.str.val, "VT_UI2")) else if(!strcmp(pval_type->value.str.val, "VT_UI2"))
var_arg->vt = VT_UI2; var_arg->vt = VT_UI2;
else if(strstr(pval_type->value.str.val, "VT_UI4")) else if(!strcmp(pval_type->value.str.val, "VT_UI4"))
var_arg->vt = VT_UI4; var_arg->vt = VT_UI4;
else if(strstr(pval_type->value.str.val, "VT_INT")) else if(!strcmp(pval_type->value.str.val, "VT_INT"))
var_arg->vt = VT_INT; var_arg->vt = VT_INT;
else if(strstr(pval_type->value.str.val, "VT_UINT")) else if(!strcmp(pval_type->value.str.val, "VT_UINT"))
var_arg->vt = VT_UINT; var_arg->vt = VT_UINT;
// is safearray // is safearray
if(strstr(pval_type->value.str.val, "VT_ARRAY")) if(!strcmp(pval_type->value.str.val, "VT_ARRAY"))
var_arg->vt |= VT_ARRAY; var_arg->vt |= VT_ARRAY;
// by reference // by reference
if(strstr(pval_type->value.str.val, "VT_BYREF")) if(!strcmp(pval_type->value.str.val, "VT_BYREF"))
var_arg->vt |= VT_BYREF; var_arg->vt |= VT_BYREF;
switch(var_arg->vt) switch(var_arg->vt)

View file

@ -145,7 +145,7 @@ pval php_VARIANT_get_property_handler(zend_property_reference *property_referenc
break; break;
case OE_IS_OBJECT: case OE_IS_OBJECT:
if(strstr(overloaded_property->element.value.str.val, "value")) if(!strcmp(overloaded_property->element.value.str.val, "value"))
php_variant_to_pval(var_arg, &result, 0); php_variant_to_pval(var_arg, &result, 0);
else else
{ {
@ -192,197 +192,197 @@ static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value)
type.type = IS_STRING; type.type = IS_STRING;
if(strstr(arg_property->value.str.val, "bVal")) if(!strcmp(arg_property->value.str.val, "bVal"))
{ {
type.value.str.val = "VT_UI1"; type.value.str.val = "VT_UI1";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "iVal")) else if(!strcmp(arg_property->value.str.val, "iVal"))
{ {
type.value.str.val = "VT_I2"; type.value.str.val = "VT_I2";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "lVal")) else if(!strcmp(arg_property->value.str.val, "lVal"))
{ {
type.value.str.val = "VT_I4"; type.value.str.val = "VT_I4";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "fltVal")) else if(!strcmp(arg_property->value.str.val, "fltVal"))
{ {
type.value.str.val = "VT_R4"; type.value.str.val = "VT_R4";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "dblVal")) else if(!strcmp(arg_property->value.str.val, "dblVal"))
{ {
type.value.str.val = "VT_R8"; type.value.str.val = "VT_R8";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "boolVal")) else if(!strcmp(arg_property->value.str.val, "boolVal"))
{ {
type.value.str.val = "VT_BOOL"; type.value.str.val = "VT_BOOL";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "scode")) else if(!strcmp(arg_property->value.str.val, "scode"))
{ {
type.value.str.val = "VT_ERROR"; type.value.str.val = "VT_ERROR";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "cyVal")) else if(!strcmp(arg_property->value.str.val, "cyVal"))
{ {
type.value.str.val = "VT_CY"; type.value.str.val = "VT_CY";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "date")) else if(!strcmp(arg_property->value.str.val, "date"))
{ {
type.value.str.val = "VT_DATE"; type.value.str.val = "VT_DATE";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "bstrVal")) else if(!strcmp(arg_property->value.str.val, "bstrVal"))
{ {
type.value.str.val = "VT_BSTR"; type.value.str.val = "VT_BSTR";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdecVal")) else if(!strcmp(arg_property->value.str.val, "pdecVal"))
{ {
type.value.str.val = "VT_DECIMAL|VT_BYREF"; type.value.str.val = "VT_DECIMAL|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "punkVal")) else if(!strcmp(arg_property->value.str.val, "punkVal"))
{ {
type.value.str.val = "VT_UNKNOWN"; type.value.str.val = "VT_UNKNOWN";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdispVal")) else if(!strcmp(arg_property->value.str.val, "pdispVal"))
{ {
type.value.str.val = "VT_DISPATCH"; type.value.str.val = "VT_DISPATCH";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "parray")) else if(!strcmp(arg_property->value.str.val, "parray"))
{ {
type.value.str.val = "VT_ARRAY"; type.value.str.val = "VT_ARRAY";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pbVal")) else if(!strcmp(arg_property->value.str.val, "pbVal"))
{ {
type.value.str.val = "VT_UI1|VT_BYREF"; type.value.str.val = "VT_UI1|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "piVal")) else if(!strcmp(arg_property->value.str.val, "piVal"))
{ {
type.value.str.val = "VT_I2|VT_BYREF"; type.value.str.val = "VT_I2|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "plVal")) else if(!strcmp(arg_property->value.str.val, "plVal"))
{ {
type.value.str.val = "VT_I4|VT_BYREF"; type.value.str.val = "VT_I4|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pfltVal")) else if(!strcmp(arg_property->value.str.val, "pfltVal"))
{ {
type.value.str.val = "VT_R4|VT_BYREF"; type.value.str.val = "VT_R4|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdblVal")) else if(!strcmp(arg_property->value.str.val, "pdblVal"))
{ {
type.value.str.val = "VT_R8|VT_BYREF"; type.value.str.val = "VT_R8|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pboolVal")) else if(!strcmp(arg_property->value.str.val, "pboolVal"))
{ {
type.value.str.val = "VT_BOOL|VT_BYREF"; type.value.str.val = "VT_BOOL|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pscode")) else if(!strcmp(arg_property->value.str.val, "pscode"))
{ {
type.value.str.val = "VT_ERROR|VT_BYREF"; type.value.str.val = "VT_ERROR|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pcyVal")) else if(!strcmp(arg_property->value.str.val, "pcyVal"))
{ {
type.value.str.val = "VT_CY|VT_BYREF"; type.value.str.val = "VT_CY|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pdate")) else if(!strcmp(arg_property->value.str.val, "pdate"))
{ {
type.value.str.val = "VT_DATE|VT_BYREF"; type.value.str.val = "VT_DATE|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pbstrVal")) else if(!strcmp(arg_property->value.str.val, "pbstrVal"))
{ {
type.value.str.val = "VT_BSTR|VT_BYREF"; type.value.str.val = "VT_BSTR|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "ppunkVal")) else if(!strcmp(arg_property->value.str.val, "ppunkVal"))
{ {
type.value.str.val = "VT_UNKNOWN|VT_BYREF"; type.value.str.val = "VT_UNKNOWN|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "ppdispVal")) else if(!strcmp(arg_property->value.str.val, "ppdispVal"))
{ {
type.value.str.val = "VT_DISPATCH|VT_BYREF"; type.value.str.val = "VT_DISPATCH|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pparray")) else if(!strcmp(arg_property->value.str.val, "pparray"))
{ {
type.value.str.val = "VT_ARRAY|VT_BYREF"; type.value.str.val = "VT_ARRAY|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pvarVal")) else if(!strcmp(arg_property->value.str.val, "pvarVal"))
{ {
type.value.str.val = "VT_VARIANT|VT_BYREF"; type.value.str.val = "VT_VARIANT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "byref")) else if(!strcmp(arg_property->value.str.val, "byref"))
{ {
type.value.str.val = "VT_BYREF"; type.value.str.val = "VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "cVal")) else if(!strcmp(arg_property->value.str.val, "cVal"))
{ {
type.value.str.val = "VT_I1"; type.value.str.val = "VT_I1";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "uiVal")) else if(!strcmp(arg_property->value.str.val, "uiVal"))
{ {
type.value.str.val = "VT_UI2"; type.value.str.val = "VT_UI2";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "ulVal")) else if(!strcmp(arg_property->value.str.val, "ulVal"))
{ {
type.value.str.val = "VT_UI4"; type.value.str.val = "VT_UI4";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "intVal")) else if(!strcmp(arg_property->value.str.val, "intVal"))
{ {
type.value.str.val = "VT_INT"; type.value.str.val = "VT_INT";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "uintVal")) else if(!strcmp(arg_property->value.str.val, "uintVal"))
{ {
type.value.str.val = "VT_UINT|VT_BYREF"; type.value.str.val = "VT_UINT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pcVal")) else if(!strcmp(arg_property->value.str.val, "pcVal"))
{ {
type.value.str.val = "VT_I1|VT_BYREF"; type.value.str.val = "VT_I1|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "puiVal")) else if(!strcmp(arg_property->value.str.val, "puiVal"))
{ {
type.value.str.val = "VT_UI2|VT_BYREF"; type.value.str.val = "VT_UI2|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pulVal")) else if(!strcmp(arg_property->value.str.val, "pulVal"))
{ {
type.value.str.val = "VT_UI4|VT_BYREF"; type.value.str.val = "VT_UI4|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "pintVal")) else if(!strcmp(arg_property->value.str.val, "pintVal"))
{ {
type.value.str.val = "VT_INT|VT_BYREF"; type.value.str.val = "VT_INT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);
} }
else if(strstr(arg_property->value.str.val, "puintVal")) else if(!strcmp(arg_property->value.str.val, "puintVal"))
{ {
type.value.str.val = "VT_UINT|VT_BYREF"; type.value.str.val = "VT_UINT|VT_BYREF";
php_pval_to_variant_ex(value, var_arg, &type); php_pval_to_variant_ex(value, var_arg, &type);