2 +----------------------------------------------------------------------+
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1997-2013 The PHP Group |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 3.01 of the PHP license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.php.net/license/3_01.txt |
11 | If you did not receive a copy of the PHP license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@php.net so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Author: Wez Furlong <wez@thebrainroom.com> |
16 +----------------------------------------------------------------------+
21 #ifndef PHP_COM_DOTNET_INTERNAL_H
22 #define PHP_COM_DOTNET_INTERNAL_H
30 #include "win32/winutil.h"
32 typedef struct _php_com_dotnet_object
{
43 /* associated event sink */
44 IDispatch
*sink_dispatch
;
48 /* cache for method signatures */
49 HashTable
*method_cache
;
50 /* cache for name -> DISPID */
51 HashTable
*id_of_name_cache
;
52 } php_com_dotnet_object
;
54 static inline int php_com_is_valid_object(zval
*zv TSRMLS_DC
)
56 zend_class_entry
*ce
= Z_OBJCE_P(zv
);
57 return strcmp("com", ce
->name
) == 0 ||
58 strcmp("dotnet", ce
->name
) == 0 ||
59 strcmp("variant", ce
->name
) == 0;
62 #define CDNO_FETCH(zv) (php_com_dotnet_object*)zend_object_store_get_object(zv TSRMLS_CC)
63 #define CDNO_FETCH_VERIFY(obj, zv) do { \
64 if (!php_com_is_valid_object(zv TSRMLS_CC)) { \
65 php_com_throw_exception(E_UNEXPECTED, "expected a variant object" TSRMLS_CC); \
68 obj = (php_com_dotnet_object*)zend_object_store_get_object(zv TSRMLS_CC); \
72 TsHashTable php_com_typelibraries
;
73 zend_class_entry
*php_com_variant_class_entry
, *php_com_exception_class_entry
, *php_com_saproxy_class_entry
;
76 zend_object_value
php_com_object_new(zend_class_entry
*ce TSRMLS_DC
);
77 void php_com_object_clone(void *object
, void **clone_ptr TSRMLS_DC
);
78 void php_com_object_free_storage(void *object TSRMLS_DC
);
79 zend_object_handlers php_com_object_handlers
;
80 void php_com_object_enable_event_sink(php_com_dotnet_object
*obj
, int enable TSRMLS_DC
);
83 zend_object_iterator
*php_com_saproxy_iter_get(zend_class_entry
*ce
, zval
*object
, int by_ref TSRMLS_DC
);
84 int php_com_saproxy_create(zval
*com_object
, zval
*proxy_out
, zval
*index TSRMLS_DC
);
87 PHP_COM_DOTNET_API
char *php_com_olestring_to_string(OLECHAR
*olestring
,
88 uint
*string_len
, int codepage TSRMLS_DC
);
89 PHP_COM_DOTNET_API OLECHAR
*php_com_string_to_olestring(char *string
,
90 uint string_len
, int codepage TSRMLS_DC
);
94 PHP_FUNCTION(com_create_instance
);
95 PHP_FUNCTION(com_event_sink
);
96 PHP_FUNCTION(com_create_guid
);
97 PHP_FUNCTION(com_print_typeinfo
);
98 PHP_FUNCTION(com_message_pump
);
99 PHP_FUNCTION(com_load_typelib
);
100 PHP_FUNCTION(com_get_active_object
);
102 HRESULT
php_com_invoke_helper(php_com_dotnet_object
*obj
, DISPID id_member
,
103 WORD flags
, DISPPARAMS
*disp_params
, VARIANT
*v
, int silent
, int allow_noarg TSRMLS_DC
);
104 HRESULT
php_com_get_id_of_name(php_com_dotnet_object
*obj
, char *name
,
105 int namelen
, DISPID
*dispid TSRMLS_DC
);
106 int php_com_do_invoke_by_id(php_com_dotnet_object
*obj
, DISPID dispid
,
107 WORD flags
, VARIANT
*v
, int nargs
, zval
**args
, int silent
, int allow_noarg TSRMLS_DC
);
108 int php_com_do_invoke(php_com_dotnet_object
*obj
, char *name
, int namelen
,
109 WORD flags
, VARIANT
*v
, int nargs
, zval
**args
, int allow_noarg TSRMLS_DC
);
110 int php_com_do_invoke_byref(php_com_dotnet_object
*obj
, char *name
, int namelen
,
111 WORD flags
, VARIANT
*v
, int nargs
, zval
***args TSRMLS_DC
);
114 int php_com_wrapper_minit(INIT_FUNC_ARGS
);
115 PHP_COM_DOTNET_API IDispatch
*php_com_wrapper_export_as_sink(zval
*val
, GUID
*sinkid
, HashTable
*id_to_name TSRMLS_DC
);
116 PHP_COM_DOTNET_API IDispatch
*php_com_wrapper_export(zval
*val TSRMLS_DC
);
119 int php_com_persist_minit(INIT_FUNC_ARGS
);
122 PHP_FUNCTION(com_variant_create_instance
);
123 PHP_FUNCTION(variant_set
);
124 PHP_FUNCTION(variant_add
);
125 PHP_FUNCTION(variant_cat
);
126 PHP_FUNCTION(variant_sub
);
127 PHP_FUNCTION(variant_mul
);
128 PHP_FUNCTION(variant_and
);
129 PHP_FUNCTION(variant_div
);
130 PHP_FUNCTION(variant_eqv
);
131 PHP_FUNCTION(variant_idiv
);
132 PHP_FUNCTION(variant_imp
);
133 PHP_FUNCTION(variant_mod
);
134 PHP_FUNCTION(variant_or
);
135 PHP_FUNCTION(variant_pow
);
136 PHP_FUNCTION(variant_xor
);
137 PHP_FUNCTION(variant_abs
);
138 PHP_FUNCTION(variant_fix
);
139 PHP_FUNCTION(variant_int
);
140 PHP_FUNCTION(variant_neg
);
141 PHP_FUNCTION(variant_not
);
142 PHP_FUNCTION(variant_round
);
143 PHP_FUNCTION(variant_cmp
);
144 PHP_FUNCTION(variant_date_to_timestamp
);
145 PHP_FUNCTION(variant_date_from_timestamp
);
146 PHP_FUNCTION(variant_get_type
);
147 PHP_FUNCTION(variant_set_type
);
148 PHP_FUNCTION(variant_cast
);
150 PHP_COM_DOTNET_API
void php_com_variant_from_zval_with_type(VARIANT
*v
, zval
*z
, VARTYPE type
, int codepage TSRMLS_DC
);
151 PHP_COM_DOTNET_API
void php_com_variant_from_zval(VARIANT
*v
, zval
*z
, int codepage TSRMLS_DC
);
152 PHP_COM_DOTNET_API
int php_com_zval_from_variant(zval
*z
, VARIANT
*v
, int codepage TSRMLS_DC
);
153 PHP_COM_DOTNET_API
int php_com_copy_variant(VARIANT
*dst
, VARIANT
*src TSRMLS_DC
);
156 PHP_FUNCTION(com_dotnet_create_instance
);
157 void php_com_dotnet_rshutdown(TSRMLS_D
);
158 void php_com_dotnet_mshutdown(TSRMLS_D
);
161 void php_com_throw_exception(HRESULT code
, char *message TSRMLS_DC
);
162 PHP_COM_DOTNET_API
void php_com_wrap_dispatch(zval
*z
, IDispatch
*disp
,
163 int codepage TSRMLS_DC
);
164 PHP_COM_DOTNET_API
void php_com_wrap_variant(zval
*z
, VARIANT
*v
,
165 int codepage TSRMLS_DC
);
166 PHP_COM_DOTNET_API
int php_com_safearray_get_elem(VARIANT
*array
, VARIANT
*dest
, LONG dim1 TSRMLS_DC
);
169 PHP_COM_DOTNET_API ITypeLib
*php_com_load_typelib_via_cache(char *search_string
,
170 int codepage
, int *cached TSRMLS_DC
);
171 PHP_COM_DOTNET_API ITypeLib
*php_com_load_typelib(char *search_string
, int codepage TSRMLS_DC
);
172 PHP_COM_DOTNET_API
int php_com_import_typelib(ITypeLib
*TL
, int mode
,
173 int codepage TSRMLS_DC
);
174 void php_com_typelibrary_dtor(void *pDest
);
175 ITypeInfo
*php_com_locate_typeinfo(char *typelibname
, php_com_dotnet_object
*obj
, char *dispname
, int sink TSRMLS_DC
);
176 int php_com_process_typeinfo(ITypeInfo
*typeinfo
, HashTable
*id_to_name
, int printdef
, GUID
*guid
, int codepage TSRMLS_DC
);
179 zend_object_iterator
*php_com_iter_get(zend_class_entry
*ce
, zval
*object
, int by_ref TSRMLS_DC
);