Skip to content

Commit 3949658

Browse files
author
Harald Radi
committed
cleanup
added some macros
1 parent 5943e68 commit 3949658

File tree

8 files changed

+126
-30
lines changed

8 files changed

+126
-30
lines changed

ext/com/com.h

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include "oleauto.h"
77

88
typedef struct comval_ {
9+
#ifdef _DEBUG
10+
int resourceindex;
11+
#endif
912
BOOL typelib;
1013
BOOL enumeration;
1114
int refcount;
@@ -16,28 +19,47 @@ typedef struct comval_ {
1619
} i;
1720
} comval;
1821

19-
PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult);
20-
PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId);
21-
PHPAPI HRESULT php_COM_release(comval *obj);
22-
PHPAPI HRESULT php_COM_addref(comval *obj);
23-
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
24-
PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
22+
#define ZVAL_COM(z,o) { \
23+
pval *handle; \
24+
\
25+
Z_TYPE_P(z) = IS_OBJECT; \
26+
(z)->value.obj.ce = &com_class_entry; \
27+
\
28+
ALLOC_HASHTABLE((z)->value.obj.properties); \
29+
zend_hash_init((z)->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0); \
30+
\
31+
ALLOC_ZVAL(handle); \
32+
INIT_PZVAL(handle); \
33+
ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \
34+
\
35+
pval_copy_constructor(handle); \
36+
zend_hash_index_update((z)->value.obj.properties, 0, \
37+
&handle, sizeof(pval *), NULL); \
38+
}
39+
40+
#define RETVAL_COM(o) ZVAL_COM(&return_value, o)
41+
#define RETURN_COM(o) RETVAL_COM(o) \
42+
return;
43+
44+
#define ALLOC_COM(z) (z) = emalloc(sizeof(comval))
45+
#define IS_COM php_COM_get_le_comval()
2546

2647
#define C_HASTLIB(x) ((x)->typelib)
2748
#define C_HASENUM(x) ((x)->enumeration)
28-
#define C_ISREFD(x) ((x)->refcount)
49+
#define C_REFCOUNT(x) ((x)->refcount)
50+
#define C_ISREFD(x) C_REFCOUNT(x)
51+
52+
#define C_ADDREF(x) (++((x)->refcount))
53+
#define C_RELEASE(x) (--((x)->refcount))
2954

30-
#define C_DISPATCH(x) ((x)->i.dispatch)
31-
#define C_TYPEINFO(x) ((x)->i.typeinfo)
55+
#define C_DISPATCH(x) ((x)->i.dispatch)
56+
#define C_TYPEINFO(x) ((x)->i.typeinfo)
3257
#define C_ENUMVARIANT(x) ((x)->i.enumvariant)
3358

3459
#define C_DISPATCH_VT(x) (C_DISPATCH(x)->lpVtbl)
3560
#define C_TYPEINFO_VT(x) (C_TYPEINFO(x)->lpVtbl)
3661
#define C_ENUMVARIANT_VT(x) (C_ENUMVARIANT(x)->lpVtbl)
3762

38-
#define C_ADDREF(x) (++((x)->refcount))
39-
#define C_RELEASE(x) (--((x)->refcount))
40-
4163
#endif /* PHP_WIN32 */
4264

4365
#endif /* COM_H */

ext/com/php_COM.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@
33

44
#if PHP_WIN32
55

6-
BEGIN_EXTERN_C()
7-
86
#include "com.h"
97

8+
BEGIN_EXTERN_C()
9+
1010
extern PHP_MINIT_FUNCTION(COM);
1111
extern PHP_MSHUTDOWN_FUNCTION(COM);
1212

13-
extern int php_COM_get_le_idispatch();
13+
extern PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult);
14+
extern PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId);
15+
extern PHPAPI HRESULT php_COM_release(comval *obj);
16+
extern PHPAPI HRESULT php_COM_addref(comval *obj);
17+
extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
18+
extern PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
19+
20+
extern int php_COM_get_le_comval();
1421

1522
extern zend_module_entry COM_module_entry;
1623
extern zend_class_entry com_class_entry;
@@ -20,6 +27,10 @@ extern int php_COM_set_property_handler(zend_property_reference *property_refere
2027
extern char *php_COM_error_message(HRESULT hr);
2128
extern void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
2229

30+
#ifdef DEBUG
31+
extern int resourcecounter;
32+
#endif
33+
2334
END_EXTERN_C()
2435

2536
#define COM_module_ptr &COM_module_entry

ext/com/php_VARIANT.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
#if PHP_WIN32
55

6+
#include "variant.h"
7+
8+
extern int php_VARIANT_get_le_variant();
9+
610
extern PHP_MINIT_FUNCTION(VARIANT);
711
extern PHP_MSHUTDOWN_FUNCTION(VARIANT);
812

ext/com/variant.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifndef VARIANT_H
2+
#define VARIANT_H
3+
4+
#if PHP_WIN32
5+
6+
#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT))
7+
#define IS_VARIANT php_VARIANT_get_le_variant()
8+
9+
#endif /* PHP_WIN32 */
10+
11+
#endif /* VARIANT_H */

ext/rpc/com/com_wrapper.h

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@
66
#include "oleauto.h"
77

88
typedef struct comval_ {
9+
#ifdef _DEBUG
10+
int resourceindex;
11+
#endif
912
BOOL typelib;
1013
BOOL enumeration;
1114
int refcount;
@@ -16,28 +19,47 @@ typedef struct comval_ {
1619
} i;
1720
} comval;
1821

19-
PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult);
20-
PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId);
21-
PHPAPI HRESULT php_COM_release(comval *obj);
22-
PHPAPI HRESULT php_COM_addref(comval *obj);
23-
PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
24-
PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
22+
#define ZVAL_COM(z,o) { \
23+
pval *handle; \
24+
\
25+
Z_TYPE_P(z) = IS_OBJECT; \
26+
(z)->value.obj.ce = &com_class_entry; \
27+
\
28+
ALLOC_HASHTABLE((z)->value.obj.properties); \
29+
zend_hash_init((z)->value.obj.properties, 0, NULL, ZVAL_PTR_DTOR, 0); \
30+
\
31+
ALLOC_ZVAL(handle); \
32+
INIT_PZVAL(handle); \
33+
ZVAL_LONG(handle, zend_list_insert((o), IS_COM)); \
34+
\
35+
pval_copy_constructor(handle); \
36+
zend_hash_index_update((z)->value.obj.properties, 0, \
37+
&handle, sizeof(pval *), NULL); \
38+
}
39+
40+
#define RETVAL_COM(o) ZVAL_COM(&return_value, o)
41+
#define RETURN_COM(o) RETVAL_COM(o) \
42+
return;
43+
44+
#define ALLOC_COM(z) (z) = emalloc(sizeof(comval))
45+
#define IS_COM php_COM_get_le_comval()
2546

2647
#define C_HASTLIB(x) ((x)->typelib)
2748
#define C_HASENUM(x) ((x)->enumeration)
28-
#define C_ISREFD(x) ((x)->refcount)
49+
#define C_REFCOUNT(x) ((x)->refcount)
50+
#define C_ISREFD(x) C_REFCOUNT(x)
51+
52+
#define C_ADDREF(x) (++((x)->refcount))
53+
#define C_RELEASE(x) (--((x)->refcount))
2954

30-
#define C_DISPATCH(x) ((x)->i.dispatch)
31-
#define C_TYPEINFO(x) ((x)->i.typeinfo)
55+
#define C_DISPATCH(x) ((x)->i.dispatch)
56+
#define C_TYPEINFO(x) ((x)->i.typeinfo)
3257
#define C_ENUMVARIANT(x) ((x)->i.enumvariant)
3358

3459
#define C_DISPATCH_VT(x) (C_DISPATCH(x)->lpVtbl)
3560
#define C_TYPEINFO_VT(x) (C_TYPEINFO(x)->lpVtbl)
3661
#define C_ENUMVARIANT_VT(x) (C_ENUMVARIANT(x)->lpVtbl)
3762

38-
#define C_ADDREF(x) (++((x)->refcount))
39-
#define C_RELEASE(x) (--((x)->refcount))
40-
4163
#endif /* PHP_WIN32 */
4264

4365
#endif /* COM_H */

ext/rpc/com/php_com.h

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,21 @@
33

44
#if PHP_WIN32
55

6-
BEGIN_EXTERN_C()
7-
86
#include "com.h"
97

8+
BEGIN_EXTERN_C()
9+
1010
extern PHP_MINIT_FUNCTION(COM);
1111
extern PHP_MSHUTDOWN_FUNCTION(COM);
1212

13-
extern int php_COM_get_le_idispatch();
13+
extern PHPAPI HRESULT php_COM_invoke(comval *obj, DISPID dispIdMember, WORD wFlags, DISPPARAMS FAR* pDispParams, VARIANT FAR* pVarResult);
14+
extern PHPAPI HRESULT php_COM_get_ids_of_names(comval *obj, OLECHAR FAR* FAR* rgszNames, DISPID FAR* rgDispId);
15+
extern PHPAPI HRESULT php_COM_release(comval *obj);
16+
extern PHPAPI HRESULT php_COM_addref(comval *obj);
17+
extern PHPAPI HRESULT php_COM_set(comval *obj, IDispatch FAR* pDisp, int cleanup);
18+
extern PHPAPI HRESULT php_COM_clone(comval *obj, comval *clone, int cleanup);
19+
20+
extern int php_COM_get_le_comval();
1421

1522
extern zend_module_entry COM_module_entry;
1623
extern zend_class_entry com_class_entry;
@@ -20,6 +27,10 @@ extern int php_COM_set_property_handler(zend_property_reference *property_refere
2027
extern char *php_COM_error_message(HRESULT hr);
2128
extern void php_COM_call_function_handler(INTERNAL_FUNCTION_PARAMETERS, zend_property_reference *property_reference);
2229

30+
#ifdef DEBUG
31+
extern int resourcecounter;
32+
#endif
33+
2334
END_EXTERN_C()
2435

2536
#define COM_module_ptr &COM_module_entry

ext/rpc/com/php_variant.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@
33

44
#if PHP_WIN32
55

6+
#include "variant.h"
7+
8+
extern int php_VARIANT_get_le_variant();
9+
610
extern PHP_MINIT_FUNCTION(VARIANT);
711
extern PHP_MSHUTDOWN_FUNCTION(VARIANT);
812

ext/rpc/com/variant.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#ifndef VARIANT_H
2+
#define VARIANT_H
3+
4+
#if PHP_WIN32
5+
6+
#define ALLOC_VARIANT(v) (v) = (VARIANT *) emalloc(sizeof(VARIANT))
7+
#define IS_VARIANT php_VARIANT_get_le_variant()
8+
9+
#endif /* PHP_WIN32 */
10+
11+
#endif /* VARIANT_H */

0 commit comments

Comments
 (0)