cvs: /php4/ext/com COM.c
| From: | Sam Ruby | Date: | Fri, 03 Dec 1999 02:25:52 +0000 |
| Subject: | cvs: /php4/ext/com COM.c | ||
| Groups: | php.version4 | ||
| Request: | Send a blank email to php-version4+get-7299@lists.php.net to get a copy of this message | ||
rubys Thu Dec 2 21:25:52 1999 EDT
Modified files:
/php4/ext/com COM.c
Log:
Support DATE_to_pval and DISPATCH_to_pval
Index: php4/ext/com/COM.c
diff -u php4/ext/com/COM.c:1.15 php4/ext/com/COM.c:1.16
--- php4/ext/com/COM.c:1.15 Fri Nov 26 11:51:52 1999
+++ php4/ext/com/COM.c Thu Dec 2 21:25:21 1999
@@ -49,6 +49,8 @@
static int le_idispatch;
+static zend_class_entry com_class_entry;
+
function_entry COM_functions[] = {
PHP_FE(COM_load, NULL)
PHP_FE(COM_invoke, NULL)
@@ -384,12 +386,47 @@
}
pval_arg->type = IS_STRING;
break;
- case VT_UNKNOWN:
+ case VT_DATE:
+ {
+ SYSTEMTIME wintime;
+ struct tm phptime;
+
+ VariantTimeToSystemTime(var_arg->date, &wintime);
+ phptime.tm_year = wintime.wYear-1900;
+ phptime.tm_mon = wintime.wMonth-1;
+ phptime.tm_mday = wintime.wDay;
+ phptime.tm_hour = wintime.wHour;
+ phptime.tm_min = wintime.wMinute;
+ phptime.tm_sec = wintime.wSecond;
+ phptime.tm_isdst= -1;
+
+ tzset();
+ pval_arg->value.lval = mktime(&phptime);
+ pval_arg->type = IS_LONG;
+ break;
+ }
case VT_DISPATCH:
- /* possibly, return IDispatch as a new COM object. right now - just get rid of it */
- var_arg->pdispVal->lpVtbl->Release(var_arg->pdispVal);
- var_reset(pval_arg);
+ {
+ pval *handle;
+
+ pval_arg->type=IS_OBJECT;
+ pval_arg->value.obj.ce=&com_class_entry;
+ pval_arg->value.obj.properties = (HashTable *) emalloc(sizeof(HashTable));
+ pval_arg->is_ref=1;
+ pval_arg->refcount=1;
+ zend_hash_init(pval_arg->value.obj.properties, 0, NULL, PVAL_PTR_DTOR, 0);
+
+ handle = (pval *) emalloc(sizeof(pval));
+ handle->type = IS_LONG;
+ handle->value.lval = php3_list_insert(var_arg->pdispVal, 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);
+ /* fallthru */
default:
php_error(E_WARNING,"Unsupported variant type");
var_reset(pval_arg);
@@ -842,7 +879,7 @@
/*
switch (overloaded_property->element.type) {
case IS_LONG:
- printf("%d (numeric)\n", overloaded_property->element.value.lval);
+ printf("%d (numeric)\n", overloaded_property->element.valuepval_arglval);
break;
case IS_STRING:
printf("'%s'\n", overloaded_property->element.value.str.val);
@@ -923,8 +960,6 @@
void php_register_COM_class()
{
- zend_class_entry com_class_entry;
-
INIT_OVERLOADED_CLASS_ENTRY(com_class_entry, "COM", NULL,
php_COM_call_function_handler,
php_COM_get_property_handler,