return ret;
}
-static int com_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
+static int com_object_cast(zval *readobj, zval *writeobj, int type TSRMLS_DC)
{
php_com_dotnet_object *obj;
VARIANT v;
VARTYPE vt = VT_EMPTY;
zval free_obj;
HRESULT res = S_OK;
-
- if (should_free) {
- free_obj = *writeobj;
- }
obj = CDNO_FETCH(readobj);
ZVAL_NULL(writeobj);
VariantClear(&v);
- if (should_free) {
- zval_dtor(&free_obj);
- }
-
if (SUCCEEDED(res)) {
return SUCCESS;
}
VariantInit(&obj->v);
obj->code_page = CP_ACP;
obj->ce = ce;
+ obj->zo.ce = ce;
retval.handle = zend_objects_store_put(obj, NULL, php_com_object_free_storage, php_com_object_clone TSRMLS_CC);
retval.handlers = &php_com_object_handlers;
message = php_win_err(code);
free_msg = 1;
}
- zend_throw_exception(php_com_exception_class_entry, message, (long)code TSRMLS_CC);
+ zend_throw_exception(U_CLASS_ENTRY(php_com_exception_class_entry), message, (long)code TSRMLS_CC);
if (free_msg) {
LocalFree(message);
}
memset(obj, 0, sizeof(*obj));
obj->code_page = codepage;
obj->ce = php_com_variant_class_entry;
+ obj->zo.ce = php_com_variant_class_entry;
VariantInit(&obj->v);
V_VT(&obj->v) = VT_DISPATCH;
memset(obj, 0, sizeof(*obj));
obj->code_page = codepage;
obj->ce = php_com_variant_class_entry;
+ obj->zo.ce = php_com_variant_class_entry;
VariantInit(&obj->v);
VariantCopyInd(&obj->v, v);
return NULL;
}
-static union _zend_function *saproxy_method_get(zval *object, char *name, int len TSRMLS_DC)
+static union _zend_function *saproxy_method_get(zval **object, char *name, int len TSRMLS_DC)
{
/* no methods */
return NULL;
return -1;
}
-static int saproxy_object_cast(zval *readobj, zval *writeobj, int type, int should_free TSRMLS_DC)
+static int saproxy_object_cast(zval *readobj, zval *writeobj, int type TSRMLS_DC)
{
return FAILURE;
}
break;
case VT_BSTR:
if (V_BSTR(v)) {
- ZVAL_UNICODE(z, V_BSTR(v), 1);
+ if (UG(unicode)) {
+ ZVAL_UNICODE(z, V_BSTR(v), 1);
+ } else {
+ Z_TYPE_P(z) = IS_STRING;
+ Z_STRVAL_P(z) = php_com_olestring_to_string(V_BSTR(v),
+ &Z_STRLEN_P(z), codepage TSRMLS_CC);
+ }
}
break;
case VT_UNKNOWN:
#undef php_win_err
typedef struct _php_com_dotnet_object {
+ zend_object zo;
+
VARIANT v;
ITypeInfo *typeinfo;