2001-01-28 03:24:51 +00:00
|
|
|
/*
|
|
|
|
+----------------------------------------------------------------------+
|
2001-12-11 15:32:16 +00:00
|
|
|
| PHP Version 4 |
|
2001-01-28 03:24:51 +00:00
|
|
|
+----------------------------------------------------------------------+
|
2001-12-11 15:32:16 +00:00
|
|
|
| Copyright (c) 1997-2002 The PHP Group |
|
2001-01-28 03:24:51 +00:00
|
|
|
+----------------------------------------------------------------------+
|
|
|
|
| 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> |
|
|
|
|
+----------------------------------------------------------------------+
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
* This module maps the VARIANT datastructure into PHP so that it can be used to
|
|
|
|
* pass values to COM and DOTNET Objects by reference and not only by value.
|
|
|
|
*
|
|
|
|
* harald
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef PHP_WIN32
|
|
|
|
|
|
|
|
#include "php.h"
|
|
|
|
#include "php_ini.h"
|
2001-02-05 21:59:17 +00:00
|
|
|
#include "ext/standard/info.h"
|
2001-08-13 23:39:11 +00:00
|
|
|
#include "php_VARIANT.h"
|
2001-01-28 03:24:51 +00:00
|
|
|
|
|
|
|
#include <unknwn.h>
|
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC);
|
|
|
|
static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value);
|
|
|
|
static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference);
|
|
|
|
static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
|
|
|
|
static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC);
|
|
|
|
static void php_register_VARIANT_class(TSRMLS_D);
|
2001-01-28 03:24:51 +00:00
|
|
|
|
|
|
|
static int le_variant;
|
2001-02-17 02:16:29 +00:00
|
|
|
static int codepage;
|
2001-01-28 03:24:51 +00:00
|
|
|
static zend_class_entry VARIANT_class_entry;
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-10-05 12:22:12 +00:00
|
|
|
void php_VARIANT_init(int module_number TSRMLS_DC)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
2001-08-13 23:39:11 +00:00
|
|
|
le_variant = zend_register_list_destructors_ex(php_VARIANT_destructor, NULL, "VARIANT", module_number);
|
2001-01-28 03:24:51 +00:00
|
|
|
|
2001-02-17 02:16:29 +00:00
|
|
|
/* variant datatypes */
|
2001-03-20 22:35:30 +00:00
|
|
|
REGISTER_LONG_CONSTANT("VT_NULL", VT_NULL, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_EMPTY", VT_EMPTY, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_UI1", VT_UI1, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_I2", VT_I2, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_I4", VT_I4, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_R4", VT_R4, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_R8", VT_R8, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_BOOL", VT_BOOL, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_ERROR", VT_ERROR, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_CY", VT_CY, CONST_CS | CONST_PERSISTENT);
|
2001-10-18 08:25:39 +00:00
|
|
|
REGISTER_LONG_CONSTANT("VT_DATE", VT_DATE, CONST_CS | CONST_PERSISTENT);
|
2001-03-20 22:35:30 +00:00
|
|
|
REGISTER_LONG_CONSTANT("VT_BSTR", VT_BSTR, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_DECIMAL", VT_DECIMAL, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_UNKNOWN", VT_UNKNOWN, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_DISPATCH", VT_DISPATCH, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_VARIANT", VT_VARIANT, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_I1", VT_I1, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_UI2", VT_UI2, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_UI4", VT_UI4, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_INT", VT_INT, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_UINT", VT_UINT, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_ARRAY", VT_ARRAY, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("VT_BYREF", VT_BYREF, CONST_CS | CONST_PERSISTENT);
|
2001-05-13 14:22:19 +00:00
|
|
|
|
2001-02-17 02:16:29 +00:00
|
|
|
/* codepages */
|
2001-03-20 22:35:30 +00:00
|
|
|
REGISTER_LONG_CONSTANT("CP_ACP", CP_ACP, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("CP_MACCP", CP_MACCP, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("CP_OEMCP", CP_OEMCP, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("CP_UTF7", CP_UTF7, CONST_CS | CONST_PERSISTENT);
|
|
|
|
REGISTER_LONG_CONSTANT("CP_UTF8", CP_UTF8, CONST_CS | CONST_PERSISTENT);
|
2001-09-24 15:56:18 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
#ifdef CP_SYMBOL
|
|
|
|
REGISTER_LONG_CONSTANT("CP_SYMBOL", CP_SYMBOL, CONST_CS | CONST_PERSISTENT);
|
|
|
|
#else
|
|
|
|
# error "CP_SYMBOL undefined"
|
|
|
|
#endif
|
|
|
|
#ifdef CP_THREAD_ACP
|
|
|
|
REGISTER_LONG_CONSTANT("CP_THREAD_ACP", CP_THREAD_ACP, CONST_CS | CONST_PERSISTENT);
|
|
|
|
#else
|
|
|
|
# error "CP_THREAD_ACP undefined"
|
|
|
|
#endif
|
2001-02-17 02:16:29 +00:00
|
|
|
|
2001-08-03 07:12:59 +00:00
|
|
|
php_register_VARIANT_class(TSRMLS_C);
|
2001-01-28 03:24:51 +00:00
|
|
|
}
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
PHPAPI int php_VARIANT_get_le_variant()
|
2001-06-24 21:09:32 +00:00
|
|
|
{
|
|
|
|
return le_variant;
|
|
|
|
}
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static void php_VARIANT_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
|
|
|
pval *object = property_reference->object;
|
|
|
|
zend_overloaded_element *function_name = (zend_overloaded_element *) property_reference->elements_list->tail->data;
|
|
|
|
VARIANT *pVar;
|
|
|
|
|
2001-08-14 10:15:43 +00:00
|
|
|
if ((zend_llist_count(property_reference->elements_list)==1) && !strcmp(Z_STRVAL(function_name->element), "variant")) {
|
2001-01-28 03:24:51 +00:00
|
|
|
/* constructor */
|
2001-02-17 02:16:29 +00:00
|
|
|
pval *object_handle, *data, *type, *code_page;
|
2001-05-13 14:22:19 +00:00
|
|
|
|
2001-06-24 21:09:32 +00:00
|
|
|
ALLOC_VARIANT(pVar);
|
2001-01-28 03:24:51 +00:00
|
|
|
VariantInit(pVar);
|
|
|
|
|
2001-08-14 10:15:43 +00:00
|
|
|
switch (ZEND_NUM_ARGS()) {
|
2001-01-28 03:24:51 +00:00
|
|
|
case 0:
|
|
|
|
/* nothing to do */
|
|
|
|
break;
|
|
|
|
case 1:
|
2001-08-14 10:13:35 +00:00
|
|
|
zend_get_parameters(ht, 1, &data);
|
2001-08-13 23:39:11 +00:00
|
|
|
php_pval_to_variant(data, pVar, codepage TSRMLS_CC);
|
2001-02-17 02:16:29 +00:00
|
|
|
codepage = CP_ACP;
|
2001-01-28 03:24:51 +00:00
|
|
|
break;
|
|
|
|
case 2:
|
2001-08-14 10:13:35 +00:00
|
|
|
zend_get_parameters(ht, 2, &data, &type);
|
2001-08-13 23:39:11 +00:00
|
|
|
php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC);
|
2001-02-17 02:16:29 +00:00
|
|
|
codepage = CP_ACP;
|
|
|
|
break;
|
|
|
|
case 3:
|
2001-08-14 10:13:35 +00:00
|
|
|
zend_get_parameters(ht, 3, &data, &type, &code_page);
|
2001-08-13 23:39:11 +00:00
|
|
|
php_pval_to_variant_ex(data, pVar, type, codepage TSRMLS_CC);
|
2001-02-17 02:16:29 +00:00
|
|
|
convert_to_long(code_page);
|
2001-09-25 21:58:48 +00:00
|
|
|
codepage = Z_LVAL_P(code_page);
|
2001-01-28 03:24:51 +00:00
|
|
|
break;
|
|
|
|
default:
|
2001-08-14 10:13:35 +00:00
|
|
|
ZEND_WRONG_PARAM_COUNT();
|
2001-01-28 03:24:51 +00:00
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
2001-06-24 21:09:32 +00:00
|
|
|
RETVAL_LONG(zend_list_insert(pVar, IS_VARIANT));
|
2001-01-28 03:24:51 +00:00
|
|
|
|
2001-08-14 10:15:43 +00:00
|
|
|
if (!zend_is_true(return_value)) {
|
2001-07-11 12:42:25 +00:00
|
|
|
ZVAL_FALSE(object);
|
2001-01-28 03:24:51 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
ALLOC_ZVAL(object_handle);
|
|
|
|
*object_handle = *return_value;
|
|
|
|
pval_copy_constructor(object_handle);
|
|
|
|
INIT_PZVAL(object_handle);
|
2001-07-28 18:55:49 +00:00
|
|
|
zend_hash_index_update(Z_OBJPROP_P(object), 0, &object_handle, sizeof(pval *), NULL);
|
|
|
|
zval_dtor(&function_name->element);
|
2001-01-28 03:24:51 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static pval php_VARIANT_get_property_handler(zend_property_reference *property_reference)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
|
|
|
zend_overloaded_element *overloaded_property;
|
|
|
|
int type;
|
|
|
|
pval result, **var_handle, *object = property_reference->object;
|
|
|
|
VARIANT *var_arg;
|
2001-08-19 22:02:46 +00:00
|
|
|
TSRMLS_FETCH();
|
|
|
|
|
2001-01-28 03:24:51 +00:00
|
|
|
|
|
|
|
/* fetch the VARIANT structure */
|
2001-07-28 18:55:49 +00:00
|
|
|
zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
|
2001-06-24 21:09:32 +00:00
|
|
|
var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
|
2001-01-28 03:24:51 +00:00
|
|
|
|
2001-08-14 10:15:43 +00:00
|
|
|
if (!var_arg || (type != IS_VARIANT)) {
|
2001-07-11 12:42:25 +00:00
|
|
|
ZVAL_FALSE(&result);
|
2001-08-14 10:13:35 +00:00
|
|
|
} else {
|
2001-01-28 03:24:51 +00:00
|
|
|
overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
|
2001-09-25 21:58:48 +00:00
|
|
|
switch (Z_TYPE_P(overloaded_property)) {
|
2001-01-28 03:24:51 +00:00
|
|
|
case OE_IS_ARRAY:
|
2001-07-11 12:42:25 +00:00
|
|
|
ZVAL_FALSE(&result);
|
2001-01-28 03:24:51 +00:00
|
|
|
break;
|
|
|
|
|
|
|
|
case OE_IS_OBJECT:
|
2001-09-26 03:24:19 +00:00
|
|
|
if (!strcmp(Z_STRVAL(overloaded_property->element), "value")) {
|
2001-08-14 12:47:09 +00:00
|
|
|
php_variant_to_pval(var_arg, &result, codepage TSRMLS_CC);
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL(overloaded_property->element), "type")) {
|
2001-06-24 21:09:32 +00:00
|
|
|
ZVAL_LONG(&result, V_VT(var_arg))
|
2001-08-14 10:13:35 +00:00
|
|
|
} else {
|
2001-07-11 12:42:25 +00:00
|
|
|
ZVAL_FALSE(&result);
|
2001-01-28 03:24:51 +00:00
|
|
|
php_error(E_WARNING, "Unknown member.");
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case OE_IS_METHOD:
|
2001-07-11 12:42:25 +00:00
|
|
|
ZVAL_FALSE(&result);
|
2001-01-28 03:24:51 +00:00
|
|
|
php_error(E_WARNING, "Unknown method.");
|
|
|
|
break;
|
2001-05-13 14:22:19 +00:00
|
|
|
|
2001-07-28 18:55:49 +00:00
|
|
|
zval_dtor(&overloaded_property->element);
|
2001-01-28 03:24:51 +00:00
|
|
|
}
|
|
|
|
}
|
2001-05-13 14:22:19 +00:00
|
|
|
|
2001-01-28 03:24:51 +00:00
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static int php_VARIANT_set_property_handler(zend_property_reference *property_reference, pval *value)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
|
|
|
zend_overloaded_element *overloaded_property;
|
|
|
|
int type;
|
|
|
|
pval **var_handle, *object = property_reference->object;
|
|
|
|
VARIANT *var_arg;
|
2001-08-19 22:02:46 +00:00
|
|
|
TSRMLS_FETCH();
|
|
|
|
|
2001-01-28 03:24:51 +00:00
|
|
|
|
|
|
|
/* fetch the VARIANT structure */
|
2001-07-28 18:55:49 +00:00
|
|
|
zend_hash_index_find(Z_OBJPROP_P(object), 0, (void **) &var_handle);
|
2001-06-24 21:09:32 +00:00
|
|
|
var_arg = zend_list_find(Z_LVAL_PP(var_handle), &type);
|
2001-01-28 03:24:51 +00:00
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
if (!var_arg || (type != IS_VARIANT)) {
|
2001-01-28 03:24:51 +00:00
|
|
|
return FAILURE;
|
2001-08-14 10:13:35 +00:00
|
|
|
}
|
2001-05-13 14:22:19 +00:00
|
|
|
|
2001-01-28 03:24:51 +00:00
|
|
|
overloaded_property = (zend_overloaded_element *) property_reference->elements_list->head->data;
|
2001-08-13 23:39:11 +00:00
|
|
|
do_VARIANT_propset(var_arg, &overloaded_property->element, value TSRMLS_CC);
|
2001-07-28 18:55:49 +00:00
|
|
|
zval_dtor(&overloaded_property->element);
|
2001-01-28 03:24:51 +00:00
|
|
|
return SUCCESS;
|
|
|
|
}
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static int do_VARIANT_propset(VARIANT *var_arg, pval *arg_property, pval *value TSRMLS_DC)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
2001-09-24 15:56:18 +00:00
|
|
|
int type;
|
2001-01-28 03:24:51 +00:00
|
|
|
|
2001-09-24 15:56:18 +00:00
|
|
|
if (!strcmp(Z_STRVAL_P(arg_property), "value")) {
|
|
|
|
php_pval_to_variant(value, var_arg, codepage TSRMLS_CC);
|
2001-05-13 14:22:19 +00:00
|
|
|
|
2001-09-24 15:56:18 +00:00
|
|
|
return SUCCESS;
|
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "bVal")) {
|
|
|
|
type = VT_UI1;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "iVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_I2;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "lVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_I4;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "fltVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_R4;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "dblVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_R8;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "boolVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_BOOL;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "scode")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_ERROR;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "cyVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_CY;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "date")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_DATE;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "bstrVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_BSTR;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pdecVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_DECIMAL|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "punkVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UNKNOWN;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pdispVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_DISPATCH;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "parray")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_ARRAY;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pbVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UI1|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "piVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_I2|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "plVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_I4|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pfltVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_R4|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pdblVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_R8|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pboolVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_BOOL|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pscode")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_ERROR|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pcyVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_CY|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pdate")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_DATE|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pbstrVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_BSTR|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "ppunkVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UNKNOWN|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "ppdispVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_DISPATCH|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pparray")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_ARRAY|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pvarVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_VARIANT|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "byref")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "cVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_I1;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "uiVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UI2;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "ulVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UI4;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "intVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_INT;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "uintVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UINT|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pcVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_I1|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "puiVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UI2|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pulVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UI4|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "pintVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_INT|VT_BYREF;
|
2001-08-14 10:15:43 +00:00
|
|
|
} else if (!strcmp(Z_STRVAL_P(arg_property), "puintVal")) {
|
2001-09-24 15:56:18 +00:00
|
|
|
type = VT_UINT|VT_BYREF;
|
2001-08-14 10:13:35 +00:00
|
|
|
} else {
|
2001-01-28 03:24:51 +00:00
|
|
|
php_error(E_WARNING, "Unknown member.");
|
|
|
|
return FAILURE;
|
|
|
|
}
|
2001-02-17 02:16:29 +00:00
|
|
|
|
2001-09-24 15:56:18 +00:00
|
|
|
php_pval_to_variant_ex2(value, var_arg, type, codepage TSRMLS_CC);
|
2001-02-17 02:16:29 +00:00
|
|
|
|
2001-01-28 03:24:51 +00:00
|
|
|
return SUCCESS;
|
|
|
|
}
|
|
|
|
|
2001-08-14 10:13:35 +00:00
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static void php_VARIANT_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
2001-08-13 23:39:11 +00:00
|
|
|
FREE_VARIANT(rsrc->ptr);
|
2001-01-28 03:24:51 +00:00
|
|
|
}
|
|
|
|
|
2001-08-13 23:39:11 +00:00
|
|
|
static void php_register_VARIANT_class(TSRMLS_D)
|
2001-01-28 03:24:51 +00:00
|
|
|
{
|
|
|
|
INIT_OVERLOADED_CLASS_ENTRY(VARIANT_class_entry, "VARIANT", NULL,
|
|
|
|
php_VARIANT_call_function_handler,
|
|
|
|
php_VARIANT_get_property_handler,
|
|
|
|
php_VARIANT_set_property_handler);
|
|
|
|
|
2001-07-30 01:56:43 +00:00
|
|
|
zend_register_internal_class(&VARIANT_class_entry TSRMLS_CC);
|
2001-01-28 03:24:51 +00:00
|
|
|
}
|
|
|
|
|
2001-01-29 21:54:46 +00:00
|
|
|
#endif /* PHP_WIN32 */
|