wez Tue Feb 18 04:46:18 2003 EDT
Modified files:
/php4/ext/rpc/com com.c variant.h
Log:
Implement com_create_guid().
Add a special case for RETVAL_VARIANT when a variant is of type VT_DISPATCH but has
a NULL dispatch pointer.
This kind of variant is returned by the WindowsInstaller automation interface.
Index: php4/ext/rpc/com/com.c
diff -u php4/ext/rpc/com/com.c:1.23 php4/ext/rpc/com/com.c:1.24
--- php4/ext/rpc/com/com.c:1.23 Tue Feb 18 02:36:30 2003
+++ php4/ext/rpc/com/com.c Tue Feb 18 04:46:18 2003
@@ -34,6 +34,7 @@
static ZEND_FUNCTION(com_indexed_prop_set);
+static ZEND_FUNCTION(com_create_guid);
/* protos */
static int com_hash(rpc_string, rpc_string *, void *, int, char *, int);
@@ -96,6 +97,7 @@
ZEND_FE(com_load_typelib, NULL)
ZEND_FE(com_print_typeinfo, NULL)
ZEND_FE(com_indexed_prop_set, NULL)
+ ZEND_FE(com_create_guid, NULL)
RPC_FUNCTION_ENTRY_END()
zend_module_entry com_module_entry = {
@@ -829,6 +831,27 @@
/* custom functions */
+
+static ZEND_FUNCTION(com_create_guid)
+{
+ GUID retval;
+ OLECHAR *guid_string;
+
+ if (ZEND_NUM_ARGS() != 0) {
+ ZEND_WRONG_PARAM_COUNT();
+ }
+
+ if (CoCreateGuid(&retval) && StringFromCLSID(&retval, &guid_string)) {
+ Z_TYPE_P(return_value) = IS_STRING;
+ Z_STRVAL_P(return_value) = php_OLECHAR_to_char(guid_string,
+&Z_STRLEN_P(return_value), CP_ACP, 0);
+
+ CoTaskMemFree(guid_string);
+ } else {
+ RETURN_FALSE;
+ }
+}
+
+
static ZEND_FUNCTION(com_indexed_prop_set)
{
Index: php4/ext/rpc/com/variant.h
diff -u php4/ext/rpc/com/variant.h:1.8 php4/ext/rpc/com/variant.h:1.9
--- php4/ext/rpc/com/variant.h:1.8 Mon Feb 10 15:58:53 2003
+++ php4/ext/rpc/com/variant.h Tue Feb 18 04:46:18 2003
@@ -32,6 +32,9 @@
efree((v));
#define ZVAL_VARIANT(z, v, cp)
\
+ if (V_VT(v) == VT_DISPATCH && V_DISPATCH(v) == NULL) {
+ \
+ V_VT(v) = VT_NULL;
+ \
+ } \
if (V_VT(v) == VT_DISPATCH) {
\
comval *obj;
\
ALLOC_COM(obj);
\
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php