Sync to Wine-20050830:

Francois Gouget <fgouget@free.fr>
- Change some Dll* functions so they are exported by name like on
  Windows.
  Update the documentation accordingly.
Robert Shearman <rob@codeweavers.com>
- Remove redundant QueryInterface in marshal_interface - the object is
  always queried later on for the correct interface of the object.
- Make sure to Release the marshaled pointer in the typelib marshaler
  once it is no longer required.
- Shunt some trace statements over to the typelib channel that aren't
  really much use except in debugging typelib parsing.
- Make sure to release a reference to being returned as VariantCopyInd
  takes one for us.
- Revert to previous behaviour of detecting names with non-alphanumeric
  characters as ones with offsets, but add in a special case for an
  empty name.
- A name in an SLTG typelib only beginning with 0xff is the indicator
  of an offset, instead of any non alpha-numeric character.
- Any dispatch interface should have the fixed vtable size, not just
  dual ones.
- Warn when ITypeInfo_GetDocumentation fails.
- Make typelib marshaler use IRpcChannelBuffer::GetBuffer if possible.
Alexandre Julliard <julliard@winehq.org>
- Replace the ICOM_THIS_From macros by inline functions.
- Moved a number of definitions that are not needed in other files into
  vartype.c
- Removed some unnecessary macros, and make some functions static.
- Get rid of the almost empty tmarshal.h file.
Vincent Beron <vberon@mecano.gme.usherb.ca>
- Uniformize DllMain TRACEing across dlls.
Mike McCormack <mike@codeweavers.com>
- Fix gcc 4.0 warnings.
- gcc 4.0 warning fixes.
Michael Stefaniuc <mstefani@redhat.de>
- Implement IPicture::get_hPal for PICTYPE_BITMAP.
- VarAdd, VarMul: I4 overflows to R8 and not I8 even if the result
  would fit in I8. Fix tests.
- Document a brokeness in the handling of I8 numbers in
  VarNumFromParseNum. Fix tests.
Walt Ogburn <reuben@ugcs.caltech.edu>
- When applying logical / himetric ratio to olefont sizes, must divide
  by the standard ratio 72 / 2540.

svn path=/trunk/; revision=17679
This commit is contained in:
Gé van Geldorp 2005-09-05 22:00:07 +00:00
parent 05aeafcb9c
commit 52a92a993f
16 changed files with 1187 additions and 1237 deletions

View file

@ -1,135 +1,135 @@
1 stub DLLGETCLASSOBJECT 1 stub DLLGETCLASSOBJECT
2 pascal SysAllocString(str) SysAllocString16 2 pascal SysAllocString(str) SysAllocString16
3 pascal SysReallocString(ptr str) SysReAllocString16 3 pascal SysReallocString(ptr str) SysReAllocString16
4 pascal SysAllocStringLen(str word) SysAllocStringLen16 4 pascal SysAllocStringLen(str word) SysAllocStringLen16
5 pascal SysReAllocStringLen(ptr str word) SysReAllocStringLen16 5 pascal SysReAllocStringLen(ptr str word) SysReAllocStringLen16
6 pascal SysFreeString(segstr) SysFreeString16 6 pascal SysFreeString(segstr) SysFreeString16
7 pascal SysStringLen(segstr) SysStringLen16 7 pascal SysStringLen(segstr) SysStringLen16
8 stub VARIANTINIT 8 stub VARIANTINIT
9 stub VARIANTCLEAR 9 stub VARIANTCLEAR
10 stub VARIANTCOPY 10 stub VARIANTCOPY
11 stub VARIANTCOPYIND 11 stub VARIANTCOPYIND
12 stub VARIANTCHANGETYPE 12 stub VARIANTCHANGETYPE
13 stub VARIANTTIMETODOSDATETIME 13 stub VARIANTTIMETODOSDATETIME
14 stub DOSDATETIMETOVARIANTTIME 14 stub DOSDATETIMETOVARIANTTIME
15 stub SAFEARRAYCREATE 15 stub SAFEARRAYCREATE
16 stub SAFEARRAYDESTROY 16 stub SAFEARRAYDESTROY
17 stub SAFEARRAYGETDIM 17 stub SAFEARRAYGETDIM
18 stub SAFEARRAYGETELEMSIZE 18 stub SAFEARRAYGETELEMSIZE
19 stub SAFEARRAYGETUBOUND 19 stub SAFEARRAYGETUBOUND
20 stub SAFEARRAYGETLBOUND 20 stub SAFEARRAYGETLBOUND
21 stub SAFEARRAYLOCK 21 stub SAFEARRAYLOCK
22 stub SAFEARRAYUNLOCK 22 stub SAFEARRAYUNLOCK
23 stub SAFEARRAYACCESSDATA 23 stub SAFEARRAYACCESSDATA
24 stub SAFEARRAYUNACCESSDATA 24 stub SAFEARRAYUNACCESSDATA
25 stub SAFEARRAYGETELEMENT 25 stub SAFEARRAYGETELEMENT
26 stub SAFEARRAYPUTELEMENT 26 stub SAFEARRAYPUTELEMENT
27 stub SAFEARRAYCOPY 27 stub SAFEARRAYCOPY
28 stub DISPGETPARAM 28 stub DISPGETPARAM
29 stub DISPGETIDSOFNAMES 29 stub DISPGETIDSOFNAMES
30 stub DISPINVOKE 30 stub DISPINVOKE
31 pascal CreateDispTypeInfo(ptr long ptr) CreateDispTypeInfo16 31 pascal CreateDispTypeInfo(ptr long ptr) CreateDispTypeInfo16
32 pascal CreateStdDispatch(ptr ptr ptr ptr) CreateStdDispatch16 32 pascal CreateStdDispatch(ptr ptr ptr ptr) CreateStdDispatch16
33 stub _IID_IDISPATCH 33 stub _IID_IDISPATCH
34 stub _IID_IENUMVARIANT 34 stub _IID_IENUMVARIANT
35 pascal RegisterActiveObject(ptr ptr long ptr) RegisterActiveObject16 35 pascal RegisterActiveObject(ptr ptr long ptr) RegisterActiveObject16
36 stub REVOKEACTIVEOBJECT 36 stub REVOKEACTIVEOBJECT
37 stub GETACTIVEOBJECT 37 stub GETACTIVEOBJECT
38 stub SAFEARRAYALLOCDESCRIPTOR 38 stub SAFEARRAYALLOCDESCRIPTOR
39 stub SAFEARRAYALLOCDATA 39 stub SAFEARRAYALLOCDATA
40 stub SAFEARRAYDESTROYDESCRIPTOR 40 stub SAFEARRAYDESTROYDESCRIPTOR
41 stub SAFEARRAYDESTROYDATA 41 stub SAFEARRAYDESTROYDATA
42 stub SAFEARRAYREDIM 42 stub SAFEARRAYREDIM
43 stub VARI2FROMI4 43 stub VARI2FROMI4
44 stub VARI2FROMR4 44 stub VARI2FROMR4
45 stub VARI2FROMR8 45 stub VARI2FROMR8
46 stub VARI2FROMCY 46 stub VARI2FROMCY
47 stub VARI2FROMDATE 47 stub VARI2FROMDATE
48 stub VARI2FROMSTR 48 stub VARI2FROMSTR
49 stub VARI2FROMDISP 49 stub VARI2FROMDISP
50 stub VARI2FROMBOOL 50 stub VARI2FROMBOOL
51 stub VARI4FROMI2 51 stub VARI4FROMI2
52 stub VARI4FROMR4 52 stub VARI4FROMR4
53 stub VARI4FROMR8 53 stub VARI4FROMR8
54 stub VARI4FROMCY 54 stub VARI4FROMCY
55 stub VARI4FROMDATE 55 stub VARI4FROMDATE
56 stub VARI4FROMSTR 56 stub VARI4FROMSTR
57 stub VARI4FROMDISP 57 stub VARI4FROMDISP
58 stub VARI4FROMBOOL 58 stub VARI4FROMBOOL
59 stub VARR4FROMI2 59 stub VARR4FROMI2
60 stub VARR4FROMI4 60 stub VARR4FROMI4
61 stub VARR4FROMR8 61 stub VARR4FROMR8
62 stub VARR4FROMCY 62 stub VARR4FROMCY
63 stub VARR4FROMDATE 63 stub VARR4FROMDATE
64 stub VARR4FROMSTR 64 stub VARR4FROMSTR
65 stub VARR4FROMDISP 65 stub VARR4FROMDISP
66 stub VARR4FROMBOOL 66 stub VARR4FROMBOOL
67 stub VARR8FROMI2 67 stub VARR8FROMI2
68 stub VARR8FROMI4 68 stub VARR8FROMI4
69 stub VARR8FROMR4 69 stub VARR8FROMR4
70 stub VARR8FROMCY 70 stub VARR8FROMCY
71 stub VARR8FROMDATE 71 stub VARR8FROMDATE
72 stub VARR8FROMSTR 72 stub VARR8FROMSTR
73 stub VARR8FROMDISP 73 stub VARR8FROMDISP
74 stub VARR8FROMBOOL 74 stub VARR8FROMBOOL
75 stub VARDATEFROMI2 75 stub VARDATEFROMI2
76 stub VARDATEFROMI4 76 stub VARDATEFROMI4
77 stub VARDATEFROMR4 77 stub VARDATEFROMR4
78 stub VARDATEFROMR8 78 stub VARDATEFROMR8
79 stub VARDATEFROMCY 79 stub VARDATEFROMCY
80 stub VARDATEFROMSTR 80 stub VARDATEFROMSTR
81 stub VARDATEFROMDISP 81 stub VARDATEFROMDISP
82 stub VARDATEFROMBOOL 82 stub VARDATEFROMBOOL
83 stub VARCYFROMI2 83 stub VARCYFROMI2
84 stub VARCYFROMI4 84 stub VARCYFROMI4
85 stub VARCYFROMR4 85 stub VARCYFROMR4
86 stub VARCYFROMR8 86 stub VARCYFROMR8
87 stub VARCYFROMDATE 87 stub VARCYFROMDATE
88 stub VARCYFROMSTR 88 stub VARCYFROMSTR
89 stub VARCYFROMDISP 89 stub VARCYFROMDISP
90 stub VARCYFROMBOOL 90 stub VARCYFROMBOOL
91 stub VARBSTRFROMI2 91 stub VARBSTRFROMI2
92 stub VARBSTRFROMI4 92 stub VARBSTRFROMI4
93 stub VARBSTRFROMR4 93 stub VARBSTRFROMR4
94 stub VARBSTRFROMR8 94 stub VARBSTRFROMR8
95 stub VARBSTRFROMCY 95 stub VARBSTRFROMCY
96 stub VARBSTRFROMDATE 96 stub VARBSTRFROMDATE
97 stub VARBSTRFROMDISP 97 stub VARBSTRFROMDISP
98 stub VARBSTRFROMBOOL 98 stub VARBSTRFROMBOOL
99 stub VARBOOLFROMI2 99 stub VARBOOLFROMI2
100 stub VARBOOLFROMI4 100 stub VARBOOLFROMI4
101 stub VARBOOLFROMR4 101 stub VARBOOLFROMR4
102 stub VARBOOLFROMR8 102 stub VARBOOLFROMR8
103 stub VARBOOLFROMDATE 103 stub VARBOOLFROMDATE
104 stub VARBOOLFROMCY 104 stub VARBOOLFROMCY
105 stub VARBOOLFROMSTR 105 stub VARBOOLFROMSTR
106 stub VARBOOLFROMDISP 106 stub VARBOOLFROMDISP
107 stub DOINVOKEMETHOD 107 stub DOINVOKEMETHOD
108 stub VARIANTCHANGETYPEEX 108 stub VARIANTCHANGETYPEEX
109 stub SAFEARRAYPTROFINDEX 109 stub SAFEARRAYPTROFINDEX
110 stub SETERRORINFO 110 stub SETERRORINFO
111 stub GETERRORINFO 111 stub GETERRORINFO
112 stub CREATEERRORINFO 112 stub CREATEERRORINFO
113 stub _IID_IERRORINFO 113 stub _IID_IERRORINFO
114 stub _IID_ICREATEERRORINFO 114 stub _IID_ICREATEERRORINFO
115 stub _IID_ISUPPORTERRORINFO 115 stub _IID_ISUPPORTERRORINFO
116 stub VARUI1FROMI2 116 stub VARUI1FROMI2
117 stub VARUI1FROMI4 117 stub VARUI1FROMI4
118 stub VARUI1FROMR4 118 stub VARUI1FROMR4
119 stub VARUI1FROMR8 119 stub VARUI1FROMR8
120 stub VARUI1FROMCY 120 stub VARUI1FROMCY
121 stub VARUI1FROMDATE 121 stub VARUI1FROMDATE
122 stub VARUI1FROMSTR 122 stub VARUI1FROMSTR
123 stub VARUI1FROMDISP 123 stub VARUI1FROMDISP
124 stub VARUI1FROMBOOL 124 stub VARUI1FROMBOOL
125 stub VARI2FROMUI1 125 stub VARI2FROMUI1
126 stub VARI4FROMUI1 126 stub VARI4FROMUI1
127 stub VARR4FROMUI1 127 stub VARR4FROMUI1
128 stub VARR8FROMUI1 128 stub VARR8FROMUI1
129 stub VARDATEFROMUI1 129 stub VARDATEFROMUI1
130 stub VARCYFROMUI1 130 stub VARCYFROMUI1
131 stub VARBSTRFROMUI1 131 stub VARBSTRFROMUI1
132 stub VARBOOLFROMUI1 132 stub VARBOOLFROMUI1
133 stub DLLCANUNLOADNOW 133 stub DLLCANUNLOADNOW
#134 stub WEP #134 stub WEP
#135 stub ___EXPORTEDSTUB #135 stub ___EXPORTEDSTUB

View file

@ -32,8 +32,7 @@
#include "ole2.h" #include "ole2.h"
#include "olectl.h" #include "olectl.h"
#include "oleauto.h" #include "oleauto.h"
#include "typelib.h"
#include "tmarshal.h"
#include "wine/debug.h" #include "wine/debug.h"
@ -701,7 +700,7 @@ extern void _get_STDFONT_CF(LPVOID);
extern void _get_STDPIC_CF(LPVOID); extern void _get_STDPIC_CF(LPVOID);
/*********************************************************************** /***********************************************************************
* DllGetClassObject (OLEAUT32.1) * DllGetClassObject (OLEAUT32.@)
*/ */
HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv) HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
{ {
@ -727,7 +726,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
return OLEAUTPS_DllGetClassObject(&CLSID_PSDispatch, iid, ppv); return OLEAUTPS_DllGetClassObject(&CLSID_PSDispatch, iid, ppv);
} }
if (IsEqualGUID(rclsid,&CLSID_PSOAInterface)) { if (IsEqualGUID(rclsid,&CLSID_PSOAInterface)) {
if (S_OK==TypeLibFac_DllGetClassObject(rclsid,iid,ppv)) if (S_OK==TMARSHAL_DllGetClassObject(rclsid,iid,ppv))
return S_OK; return S_OK;
/*FALLTHROUGH*/ /*FALLTHROUGH*/
} }
@ -736,7 +735,7 @@ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID iid, LPVOID *ppv)
} }
/*********************************************************************** /***********************************************************************
* DllCanUnloadNow (OLEAUT32.410) * DllCanUnloadNow (OLEAUT32.@)
* *
* Determine if this dll can be unloaded from the callers address space. * Determine if this dll can be unloaded from the callers address space.
* *
@ -756,7 +755,7 @@ HRESULT WINAPI DllCanUnloadNow(void)
*/ */
BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved) BOOL WINAPI DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
{ {
TRACE("(%p,%lu,%p)\n", hInstDll, fdwReason, lpvReserved); TRACE("(%p,%ld,%p)\n", hInstDll, fdwReason, lpvReserved);
switch (fdwReason) { switch (fdwReason) {
case DLL_PROCESS_ATTACH: case DLL_PROCESS_ATTACH:

View file

@ -1,416 +1,417 @@
1 stdcall -private DllGetClassObject(ptr ptr ptr) 2 stdcall SysAllocString(wstr)
2 stdcall SysAllocString(wstr) 3 stdcall SysReAllocString(ptr wstr)
3 stdcall SysReAllocString(ptr wstr) 4 stdcall SysAllocStringLen(wstr long)
4 stdcall SysAllocStringLen(wstr long) 5 stdcall SysReAllocStringLen(ptr ptr long)
5 stdcall SysReAllocStringLen(ptr ptr long) 6 stdcall SysFreeString(wstr)
6 stdcall SysFreeString(wstr) 7 stdcall SysStringLen(wstr)
7 stdcall SysStringLen(wstr) 8 stdcall VariantInit(ptr)
8 stdcall VariantInit(ptr) 9 stdcall VariantClear(ptr)
9 stdcall VariantClear(ptr) 10 stdcall VariantCopy(ptr ptr)
10 stdcall VariantCopy(ptr ptr) 11 stdcall VariantCopyInd(ptr ptr)
11 stdcall VariantCopyInd(ptr ptr) 12 stdcall VariantChangeType(ptr ptr long long)
12 stdcall VariantChangeType(ptr ptr long long) 13 stdcall VariantTimeToDosDateTime(double ptr ptr)
13 stdcall VariantTimeToDosDateTime(double ptr ptr) 14 stdcall DosDateTimeToVariantTime(long long ptr)
14 stdcall DosDateTimeToVariantTime(long long ptr) 15 stdcall SafeArrayCreate(long long ptr)
15 stdcall SafeArrayCreate(long long ptr) 16 stdcall SafeArrayDestroy(ptr)
16 stdcall SafeArrayDestroy(ptr) 17 stdcall SafeArrayGetDim(ptr)
17 stdcall SafeArrayGetDim(ptr) 18 stdcall SafeArrayGetElemsize(ptr)
18 stdcall SafeArrayGetElemsize(ptr) 19 stdcall SafeArrayGetUBound(ptr long long)
19 stdcall SafeArrayGetUBound(ptr long long) 20 stdcall SafeArrayGetLBound(ptr long long)
20 stdcall SafeArrayGetLBound(ptr long long) 21 stdcall SafeArrayLock(ptr)
21 stdcall SafeArrayLock(ptr) 22 stdcall SafeArrayUnlock(ptr)
22 stdcall SafeArrayUnlock(ptr) 23 stdcall SafeArrayAccessData(ptr ptr)
23 stdcall SafeArrayAccessData(ptr ptr) 24 stdcall SafeArrayUnaccessData(ptr)
24 stdcall SafeArrayUnaccessData(ptr) 25 stdcall SafeArrayGetElement(ptr ptr ptr)
25 stdcall SafeArrayGetElement(ptr ptr ptr) 26 stdcall SafeArrayPutElement(ptr ptr ptr)
26 stdcall SafeArrayPutElement(ptr ptr ptr) 27 stdcall SafeArrayCopy(ptr ptr)
27 stdcall SafeArrayCopy(ptr ptr) 28 stdcall DispGetParam(ptr long long ptr ptr)
28 stdcall DispGetParam(ptr long long ptr ptr) 29 stdcall DispGetIDsOfNames(ptr ptr long ptr)
29 stdcall DispGetIDsOfNames(ptr ptr long ptr) 30 stdcall DispInvoke(ptr ptr long long ptr ptr ptr ptr)
30 stdcall DispInvoke(ptr ptr long long ptr ptr ptr ptr) 31 stdcall CreateDispTypeInfo(ptr long ptr)
31 stdcall CreateDispTypeInfo(ptr long ptr) 32 stdcall CreateStdDispatch(ptr ptr ptr ptr)
32 stdcall CreateStdDispatch(ptr ptr ptr ptr) 33 stdcall RegisterActiveObject(ptr ptr long ptr)
33 stdcall RegisterActiveObject(ptr ptr long ptr) 34 stdcall RevokeActiveObject(long ptr)
34 stdcall RevokeActiveObject(long ptr) 35 stdcall GetActiveObject(ptr ptr ptr)
35 stdcall GetActiveObject(ptr ptr ptr) 36 stdcall SafeArrayAllocDescriptor(long ptr)
36 stdcall SafeArrayAllocDescriptor(long ptr) 37 stdcall SafeArrayAllocData(ptr)
37 stdcall SafeArrayAllocData(ptr) 38 stdcall SafeArrayDestroyDescriptor(ptr)
38 stdcall SafeArrayDestroyDescriptor(ptr) 39 stdcall SafeArrayDestroyData(ptr)
39 stdcall SafeArrayDestroyData(ptr) 40 stdcall SafeArrayRedim(ptr ptr)
40 stdcall SafeArrayRedim(ptr ptr) 41 stdcall SafeArrayAllocDescriptorEx(long long ptr)
41 stdcall SafeArrayAllocDescriptorEx(long long ptr) 42 stdcall SafeArrayCreateEx(long long ptr ptr)
42 stdcall SafeArrayCreateEx(long long ptr ptr) 43 stdcall SafeArrayCreateVectorEx(long long long ptr)
43 stdcall SafeArrayCreateVectorEx(long long long ptr) 44 stdcall SafeArraySetRecordInfo(ptr ptr)
44 stdcall SafeArraySetRecordInfo(ptr ptr) 45 stdcall SafeArrayGetRecordInfo(ptr ptr)
45 stdcall SafeArrayGetRecordInfo(ptr ptr) 46 stdcall VarParseNumFromStr(wstr long long ptr ptr)
46 stdcall VarParseNumFromStr(wstr long long ptr ptr) 47 stdcall VarNumFromParseNum(ptr ptr long ptr)
47 stdcall VarNumFromParseNum(ptr ptr long ptr) 48 stdcall VarI2FromUI1(long ptr)
48 stdcall VarI2FromUI1(long ptr) 49 stdcall VarI2FromI4(long ptr)
49 stdcall VarI2FromI4(long ptr) 50 stdcall VarI2FromR4(long ptr)
50 stdcall VarI2FromR4(long ptr) 51 stdcall VarI2FromR8(double ptr)
51 stdcall VarI2FromR8(double ptr) 52 stdcall VarI2FromCy(long long ptr)
52 stdcall VarI2FromCy(long long ptr) 53 stdcall VarI2FromDate(double ptr)
53 stdcall VarI2FromDate(double ptr) 54 stdcall VarI2FromStr(wstr long long ptr)
54 stdcall VarI2FromStr(wstr long long ptr) 55 stdcall VarI2FromDisp(ptr long ptr)
55 stdcall VarI2FromDisp(ptr long ptr) 56 stdcall VarI2FromBool(long ptr)
56 stdcall VarI2FromBool(long ptr) 57 stdcall SafeArraySetIID(ptr ptr)
57 stdcall SafeArraySetIID(ptr ptr) 58 stdcall VarI4FromUI1(long ptr)
58 stdcall VarI4FromUI1(long ptr) 59 stdcall VarI4FromI2(long ptr)
59 stdcall VarI4FromI2(long ptr) 60 stdcall VarI4FromR4(long ptr)
60 stdcall VarI4FromR4(long ptr) 61 stdcall VarI4FromR8(double ptr)
61 stdcall VarI4FromR8(double ptr) 62 stdcall VarI4FromCy(long long ptr)
62 stdcall VarI4FromCy(long long ptr) 63 stdcall VarI4FromDate(double ptr)
63 stdcall VarI4FromDate(double ptr) 64 stdcall VarI4FromStr(wstr long long ptr)
64 stdcall VarI4FromStr(wstr long long ptr) 65 stdcall VarI4FromDisp(ptr long ptr)
65 stdcall VarI4FromDisp(ptr long ptr) 66 stdcall VarI4FromBool(long ptr)
66 stdcall VarI4FromBool(long ptr) 67 stdcall SafeArrayGetIID(ptr ptr)
67 stdcall SafeArrayGetIID(ptr ptr) 68 stdcall VarR4FromUI1(long ptr)
68 stdcall VarR4FromUI1(long ptr) 69 stdcall VarR4FromI2(long ptr)
69 stdcall VarR4FromI2(long ptr) 70 stdcall VarR4FromI4(long ptr)
70 stdcall VarR4FromI4(long ptr) 71 stdcall VarR4FromR8(double ptr)
71 stdcall VarR4FromR8(double ptr) 72 stdcall VarR4FromCy(long long ptr)
72 stdcall VarR4FromCy(long long ptr) 73 stdcall VarR4FromDate(double ptr)
73 stdcall VarR4FromDate(double ptr) 74 stdcall VarR4FromStr(wstr long long ptr)
74 stdcall VarR4FromStr(wstr long long ptr) 75 stdcall VarR4FromDisp(ptr long ptr)
75 stdcall VarR4FromDisp(ptr long ptr) 76 stdcall VarR4FromBool(long ptr)
76 stdcall VarR4FromBool(long ptr) 77 stdcall SafeArrayGetVartype(ptr ptr)
77 stdcall SafeArrayGetVartype(ptr ptr) 78 stdcall VarR8FromUI1(long ptr)
78 stdcall VarR8FromUI1(long ptr) 79 stdcall VarR8FromI2(long ptr)
79 stdcall VarR8FromI2(long ptr) 80 stdcall VarR8FromI4(long ptr)
80 stdcall VarR8FromI4(long ptr) 81 stdcall VarR8FromR4(long ptr)
81 stdcall VarR8FromR4(long ptr) 82 stdcall VarR8FromCy(long long ptr)
82 stdcall VarR8FromCy(long long ptr) 83 stdcall VarR8FromDate(double ptr)
83 stdcall VarR8FromDate(double ptr) 84 stdcall VarR8FromStr(wstr long long ptr)
84 stdcall VarR8FromStr(wstr long long ptr) 85 stdcall VarR8FromDisp(ptr long ptr)
85 stdcall VarR8FromDisp(ptr long ptr) 86 stdcall VarR8FromBool(long ptr)
86 stdcall VarR8FromBool(long ptr) 87 stdcall VarFormat(ptr ptr long long long ptr)
87 stdcall VarFormat(ptr ptr long long long ptr) 88 stdcall VarDateFromUI1(long ptr)
88 stdcall VarDateFromUI1(long ptr) 89 stdcall VarDateFromI2(long ptr)
89 stdcall VarDateFromI2(long ptr) 90 stdcall VarDateFromI4(long ptr)
90 stdcall VarDateFromI4(long ptr) 91 stdcall VarDateFromR4(long ptr)
91 stdcall VarDateFromR4(long ptr) 92 stdcall VarDateFromR8(double ptr)
92 stdcall VarDateFromR8(double ptr) 93 stdcall VarDateFromCy(long long ptr)
93 stdcall VarDateFromCy(long long ptr) 94 stdcall VarDateFromStr(wstr long long ptr)
94 stdcall VarDateFromStr(wstr long long ptr) 95 stdcall VarDateFromDisp(ptr long ptr)
95 stdcall VarDateFromDisp(ptr long ptr) 96 stdcall VarDateFromBool(long ptr)
96 stdcall VarDateFromBool(long ptr) 97 stdcall VarFormatDateTime(ptr long long ptr)
97 stdcall VarFormatDateTime(ptr long long ptr) 98 stdcall VarCyFromUI1(long ptr)
98 stdcall VarCyFromUI1(long ptr) 99 stdcall VarCyFromI2(long ptr)
99 stdcall VarCyFromI2(long ptr) 100 stdcall VarCyFromI4(long ptr)
100 stdcall VarCyFromI4(long ptr) 101 stdcall VarCyFromR4(long ptr)
101 stdcall VarCyFromR4(long ptr) 102 stdcall VarCyFromR8(double ptr)
102 stdcall VarCyFromR8(double ptr) 103 stdcall VarCyFromDate(double ptr)
103 stdcall VarCyFromDate(double ptr) 104 stdcall VarCyFromStr(wstr long long ptr)
104 stdcall VarCyFromStr(wstr long long ptr) 105 stdcall VarCyFromDisp(ptr long ptr)
105 stdcall VarCyFromDisp(ptr long ptr) 106 stdcall VarCyFromBool(long ptr)
106 stdcall VarCyFromBool(long ptr) 107 stdcall VarFormatNumber(ptr long long long long long ptr)
107 stdcall VarFormatNumber(ptr long long long long long ptr) 108 stdcall VarBstrFromUI1(long long long ptr)
108 stdcall VarBstrFromUI1(long long long ptr) 109 stdcall VarBstrFromI2(long long long ptr)
109 stdcall VarBstrFromI2(long long long ptr) 110 stdcall VarBstrFromI4(long long long ptr)
110 stdcall VarBstrFromI4(long long long ptr) 111 stdcall VarBstrFromR4(long long long ptr)
111 stdcall VarBstrFromR4(long long long ptr) 112 stdcall VarBstrFromR8(double long long ptr)
112 stdcall VarBstrFromR8(double long long ptr) 113 stdcall VarBstrFromCy(long long long long ptr)
113 stdcall VarBstrFromCy(long long long long ptr) 114 stdcall VarBstrFromDate(double long long ptr)
114 stdcall VarBstrFromDate(double long long ptr) 115 stub VarBstrFromDisp
115 stub VarBstrFromDisp 116 stdcall VarBstrFromBool(long long long ptr)
116 stdcall VarBstrFromBool(long long long ptr) 117 stdcall VarFormatPercent(ptr long long long long long ptr)
117 stdcall VarFormatPercent(ptr long long long long long ptr) 118 stdcall VarBoolFromUI1(long ptr)
118 stdcall VarBoolFromUI1(long ptr) 119 stdcall VarBoolFromI2(long ptr)
119 stdcall VarBoolFromI2(long ptr) 120 stdcall VarBoolFromI4(long ptr)
120 stdcall VarBoolFromI4(long ptr) 121 stdcall VarBoolFromR4(long ptr)
121 stdcall VarBoolFromR4(long ptr) 122 stdcall VarBoolFromR8(double ptr)
122 stdcall VarBoolFromR8(double ptr) 123 stdcall VarBoolFromDate(double ptr)
123 stdcall VarBoolFromDate(double ptr) 124 stdcall VarBoolFromCy(long long ptr)
124 stdcall VarBoolFromCy(long long ptr) 125 stdcall VarBoolFromStr(wstr long long ptr)
125 stdcall VarBoolFromStr(wstr long long ptr) 126 stdcall VarBoolFromDisp(ptr long ptr)
126 stdcall VarBoolFromDisp(ptr long ptr) 127 stdcall VarFormatCurrency(ptr long long long long long ptr)
127 stdcall VarFormatCurrency(ptr long long long long long ptr) 128 stub VarWeekdayName # stdcall (long long long long ptr)
128 stub VarWeekdayName # stdcall (long long long long ptr) 129 stdcall VarMonthName(long long long ptr)
129 stdcall VarMonthName(long long long ptr) 130 stdcall VarUI1FromI2(long ptr)
130 stdcall VarUI1FromI2(long ptr) 131 stdcall VarUI1FromI4(long ptr)
131 stdcall VarUI1FromI4(long ptr) 132 stdcall VarUI1FromR4(long ptr)
132 stdcall VarUI1FromR4(long ptr) 133 stdcall VarUI1FromR8(double ptr)
133 stdcall VarUI1FromR8(double ptr) 134 stdcall VarUI1FromCy(long long ptr)
134 stdcall VarUI1FromCy(long long ptr) 135 stdcall VarUI1FromDate(double ptr)
135 stdcall VarUI1FromDate(double ptr) 136 stdcall VarUI1FromStr(wstr long long ptr)
136 stdcall VarUI1FromStr(wstr long long ptr) 137 stdcall VarUI1FromDisp(ptr long ptr)
137 stdcall VarUI1FromDisp(ptr long ptr) 138 stdcall VarUI1FromBool(long ptr)
138 stdcall VarUI1FromBool(long ptr) 139 stdcall VarFormatFromTokens (ptr ptr ptr long ptr long)
139 stdcall VarFormatFromTokens (ptr ptr ptr long ptr long) 140 stdcall VarTokenizeFormatString (ptr ptr long long long long ptr)
140 stdcall VarTokenizeFormatString (ptr ptr long long long long ptr) 141 stdcall VarAdd(ptr ptr ptr)
141 stdcall VarAdd(ptr ptr ptr) 142 stdcall VarAnd(ptr ptr ptr)
142 stdcall VarAnd(ptr ptr ptr) 143 stdcall VarDiv(ptr ptr ptr)
143 stdcall VarDiv(ptr ptr ptr) 144 stub OACreateTypeLib2
144 stub OACreateTypeLib2 146 stdcall DispCallFunc(ptr long long long long ptr ptr ptr)
146 stdcall DispCallFunc(ptr long long long long ptr ptr ptr) 147 stdcall VariantChangeTypeEx(ptr ptr long long long)
147 stdcall VariantChangeTypeEx(ptr ptr long long long) 148 stdcall SafeArrayPtrOfIndex(ptr ptr ptr)
148 stdcall SafeArrayPtrOfIndex(ptr ptr ptr) 149 stdcall SysStringByteLen(ptr)
149 stdcall SysStringByteLen(ptr) 150 stdcall SysAllocStringByteLen(ptr long)
150 stdcall SysAllocStringByteLen(ptr long) 152 stdcall VarEqv(ptr ptr ptr)
152 stdcall VarEqv(ptr ptr ptr) 153 stdcall VarIdiv(ptr ptr ptr)
153 stdcall VarIdiv(ptr ptr ptr) 154 stub VarImp # stdcall (ptr ptr ptr)
154 stub VarImp # stdcall (ptr ptr ptr) 155 stdcall VarMod(ptr ptr ptr)
155 stdcall VarMod(ptr ptr ptr) 156 stdcall VarMul(ptr ptr ptr)
156 stdcall VarMul(ptr ptr ptr) 157 stdcall VarOr(ptr ptr ptr)
157 stdcall VarOr(ptr ptr ptr) 158 stdcall VarPow(ptr ptr ptr)
158 stdcall VarPow(ptr ptr ptr) 159 stdcall VarSub(ptr ptr ptr)
159 stdcall VarSub(ptr ptr ptr) 160 stdcall CreateTypeLib(long wstr ptr)
160 stdcall CreateTypeLib(long wstr ptr) 161 stdcall LoadTypeLib (wstr ptr)
161 stdcall LoadTypeLib (wstr ptr) 162 stdcall LoadRegTypeLib (ptr long long long ptr)
162 stdcall LoadRegTypeLib (ptr long long long ptr) 163 stdcall RegisterTypeLib(ptr wstr wstr)
163 stdcall RegisterTypeLib(ptr wstr wstr) 164 stdcall QueryPathOfRegTypeLib(ptr long long long ptr)
164 stdcall QueryPathOfRegTypeLib(ptr long long long ptr) 165 stdcall LHashValOfNameSys(long long wstr)
165 stdcall LHashValOfNameSys(long long wstr) 166 stdcall LHashValOfNameSysA(long long str)
166 stdcall LHashValOfNameSysA(long long str) 167 stdcall VarXor(ptr ptr ptr)
167 stdcall VarXor(ptr ptr ptr) 168 stdcall VarAbs(ptr ptr)
168 stdcall VarAbs(ptr ptr) 169 stdcall VarFix(ptr ptr)
169 stdcall VarFix(ptr ptr) 170 stdcall OaBuildVersion()
170 stdcall OaBuildVersion() 171 stdcall ClearCustData(ptr)
171 stdcall ClearCustData(ptr) 172 stdcall VarInt(ptr ptr)
172 stdcall VarInt(ptr ptr) 173 stdcall VarNeg(ptr ptr)
173 stdcall VarNeg(ptr ptr) 174 stdcall VarNot(ptr ptr)
174 stdcall VarNot(ptr ptr) 175 stdcall VarRound(ptr long ptr)
175 stdcall VarRound(ptr long ptr) 176 stdcall VarCmp(ptr ptr long long)
176 stdcall VarCmp(ptr ptr long long) 177 stdcall VarDecAdd(ptr ptr ptr)
177 stdcall VarDecAdd(ptr ptr ptr) 178 stdcall VarDecDiv(ptr ptr ptr)
178 stdcall VarDecDiv(ptr ptr ptr) 179 stdcall VarDecMul(ptr ptr ptr)
179 stdcall VarDecMul(ptr ptr ptr) 180 stdcall CreateTypeLib2(long wstr ptr)
180 stdcall CreateTypeLib2(long wstr ptr) 181 stdcall VarDecSub(ptr ptr ptr)
181 stdcall VarDecSub(ptr ptr ptr) 182 stdcall VarDecAbs(ptr ptr)
182 stdcall VarDecAbs(ptr ptr) 183 stdcall LoadTypeLibEx (wstr long ptr)
183 stdcall LoadTypeLibEx (wstr long ptr) 184 stdcall SystemTimeToVariantTime(ptr ptr)
184 stdcall SystemTimeToVariantTime(ptr ptr) 185 stdcall VariantTimeToSystemTime(double ptr)
185 stdcall VariantTimeToSystemTime(double ptr) 186 stdcall UnRegisterTypeLib (ptr long long long long)
186 stdcall UnRegisterTypeLib (ptr long long long long) 187 stdcall VarDecFix(ptr ptr)
187 stdcall VarDecFix(ptr ptr) 188 stdcall VarDecInt(ptr ptr)
188 stdcall VarDecInt(ptr ptr) 189 stdcall VarDecNeg(ptr ptr)
189 stdcall VarDecNeg(ptr ptr) 190 stdcall VarDecFromUI1(long ptr)
190 stdcall VarDecFromUI1(long ptr) 191 stdcall VarDecFromI2(long ptr)
191 stdcall VarDecFromI2(long ptr) 192 stdcall VarDecFromI4(long ptr)
192 stdcall VarDecFromI4(long ptr) 193 stdcall VarDecFromR4(long ptr)
193 stdcall VarDecFromR4(long ptr) 194 stdcall VarDecFromR8(double ptr)
194 stdcall VarDecFromR8(double ptr) 195 stdcall VarDecFromDate(double ptr)
195 stdcall VarDecFromDate(double ptr) 196 stdcall VarDecFromCy(long long ptr)
196 stdcall VarDecFromCy(long long ptr) 197 stdcall VarDecFromStr(wstr long long ptr)
197 stdcall VarDecFromStr(wstr long long ptr) 198 stdcall VarDecFromDisp(ptr long ptr)
198 stdcall VarDecFromDisp(ptr long ptr) 199 stdcall VarDecFromBool(long ptr)
199 stdcall VarDecFromBool(long ptr) 200 stdcall GetErrorInfo(long ptr) ole32.GetErrorInfo
200 stdcall GetErrorInfo(long ptr) ole32.GetErrorInfo 201 stdcall SetErrorInfo(long ptr) ole32.SetErrorInfo
201 stdcall SetErrorInfo(long ptr) ole32.SetErrorInfo 202 stdcall CreateErrorInfo(ptr) ole32.CreateErrorInfo
202 stdcall CreateErrorInfo(ptr) ole32.CreateErrorInfo 203 stdcall VarDecRound(ptr long ptr)
203 stdcall VarDecRound(ptr long ptr) 204 stdcall VarDecCmp(ptr ptr)
204 stdcall VarDecCmp(ptr ptr) 205 stdcall VarI2FromI1(long ptr)
205 stdcall VarI2FromI1(long ptr) 206 stdcall VarI2FromUI2(long ptr)
206 stdcall VarI2FromUI2(long ptr) 207 stdcall VarI2FromUI4(long ptr)
207 stdcall VarI2FromUI4(long ptr) 208 stdcall VarI2FromDec(ptr ptr)
208 stdcall VarI2FromDec(ptr ptr) 209 stdcall VarI4FromI1(long ptr)
209 stdcall VarI4FromI1(long ptr) 210 stdcall VarI4FromUI2(long ptr)
210 stdcall VarI4FromUI2(long ptr) 211 stdcall VarI4FromUI4(long ptr)
211 stdcall VarI4FromUI4(long ptr) 212 stdcall VarI4FromDec(ptr ptr)
212 stdcall VarI4FromDec(ptr ptr) 213 stdcall VarR4FromI1(long ptr)
213 stdcall VarR4FromI1(long ptr) 214 stdcall VarR4FromUI2(long ptr)
214 stdcall VarR4FromUI2(long ptr) 215 stdcall VarR4FromUI4(long ptr)
215 stdcall VarR4FromUI4(long ptr) 216 stdcall VarR4FromDec(ptr ptr)
216 stdcall VarR4FromDec(ptr ptr) 217 stdcall VarR8FromI1(long ptr)
217 stdcall VarR8FromI1(long ptr) 218 stdcall VarR8FromUI2(long ptr)
218 stdcall VarR8FromUI2(long ptr) 219 stdcall VarR8FromUI4(long ptr)
219 stdcall VarR8FromUI4(long ptr) 220 stdcall VarR8FromDec(ptr ptr)
220 stdcall VarR8FromDec(ptr ptr) 221 stdcall VarDateFromI1(long ptr)
221 stdcall VarDateFromI1(long ptr) 222 stdcall VarDateFromUI2(long ptr)
222 stdcall VarDateFromUI2(long ptr) 223 stdcall VarDateFromUI4(long ptr)
223 stdcall VarDateFromUI4(long ptr) 224 stdcall VarDateFromDec(ptr ptr)
224 stdcall VarDateFromDec(ptr ptr) 225 stdcall VarCyFromI1(long ptr)
225 stdcall VarCyFromI1(long ptr) 226 stdcall VarCyFromUI2(long ptr)
226 stdcall VarCyFromUI2(long ptr) 227 stdcall VarCyFromUI4(long ptr)
227 stdcall VarCyFromUI4(long ptr) 228 stdcall VarCyFromDec(ptr ptr)
228 stdcall VarCyFromDec(ptr ptr) 229 stdcall VarBstrFromI1(long long long ptr)
229 stdcall VarBstrFromI1(long long long ptr) 230 stdcall VarBstrFromUI2(long long long ptr)
230 stdcall VarBstrFromUI2(long long long ptr) 231 stdcall VarBstrFromUI4(long long long ptr)
231 stdcall VarBstrFromUI4(long long long ptr) 232 stdcall VarBstrFromDec(ptr long long ptr)
232 stdcall VarBstrFromDec(ptr long long ptr) 233 stdcall VarBoolFromI1(long ptr)
233 stdcall VarBoolFromI1(long ptr) 234 stdcall VarBoolFromUI2(long ptr)
234 stdcall VarBoolFromUI2(long ptr) 235 stdcall VarBoolFromUI4(long ptr)
235 stdcall VarBoolFromUI4(long ptr) 236 stdcall VarBoolFromDec(ptr ptr)
236 stdcall VarBoolFromDec(ptr ptr) 237 stdcall VarUI1FromI1(long ptr)
237 stdcall VarUI1FromI1(long ptr) 238 stdcall VarUI1FromUI2(long ptr)
238 stdcall VarUI1FromUI2(long ptr) 239 stdcall VarUI1FromUI4(long ptr)
239 stdcall VarUI1FromUI4(long ptr) 240 stdcall VarUI1FromDec(ptr ptr)
240 stdcall VarUI1FromDec(ptr ptr) 241 stdcall VarDecFromI1(long ptr)
241 stdcall VarDecFromI1(long ptr) 242 stdcall VarDecFromUI2(long ptr)
242 stdcall VarDecFromUI2(long ptr) 243 stdcall VarDecFromUI4(long ptr)
243 stdcall VarDecFromUI4(long ptr) 244 stdcall VarI1FromUI1(long ptr)
244 stdcall VarI1FromUI1(long ptr) 245 stdcall VarI1FromI2(long ptr)
245 stdcall VarI1FromI2(long ptr) 246 stdcall VarI1FromI4(long ptr)
246 stdcall VarI1FromI4(long ptr) 247 stdcall VarI1FromR4(long ptr)
247 stdcall VarI1FromR4(long ptr) 248 stdcall VarI1FromR8(double ptr)
248 stdcall VarI1FromR8(double ptr) 249 stdcall VarI1FromDate(double ptr)
249 stdcall VarI1FromDate(double ptr) 250 stdcall VarI1FromCy(long long ptr)
250 stdcall VarI1FromCy(long long ptr) 251 stdcall VarI1FromStr(wstr long long ptr)
251 stdcall VarI1FromStr(wstr long long ptr) 252 stdcall VarI1FromDisp(ptr long ptr)
252 stdcall VarI1FromDisp(ptr long ptr) 253 stdcall VarI1FromBool(long ptr)
253 stdcall VarI1FromBool(long ptr) 254 stdcall VarI1FromUI2(long ptr)
254 stdcall VarI1FromUI2(long ptr) 255 stdcall VarI1FromUI4(long ptr)
255 stdcall VarI1FromUI4(long ptr) 256 stdcall VarI1FromDec(ptr ptr)
256 stdcall VarI1FromDec(ptr ptr) 257 stdcall VarUI2FromUI1(long ptr)
257 stdcall VarUI2FromUI1(long ptr) 258 stdcall VarUI2FromI2(long ptr)
258 stdcall VarUI2FromI2(long ptr) 259 stdcall VarUI2FromI4(long ptr)
259 stdcall VarUI2FromI4(long ptr) 260 stdcall VarUI2FromR4(long ptr)
260 stdcall VarUI2FromR4(long ptr) 261 stdcall VarUI2FromR8(double ptr)
261 stdcall VarUI2FromR8(double ptr) 262 stdcall VarUI2FromDate(double ptr)
262 stdcall VarUI2FromDate(double ptr) 263 stdcall VarUI2FromCy(long long ptr)
263 stdcall VarUI2FromCy(long long ptr) 264 stdcall VarUI2FromStr(wstr long long ptr)
264 stdcall VarUI2FromStr(wstr long long ptr) 265 stdcall VarUI2FromDisp(ptr long ptr)
265 stdcall VarUI2FromDisp(ptr long ptr) 266 stdcall VarUI2FromBool(long ptr)
266 stdcall VarUI2FromBool(long ptr) 267 stdcall VarUI2FromI1(long ptr)
267 stdcall VarUI2FromI1(long ptr) 268 stdcall VarUI2FromUI4(long ptr)
268 stdcall VarUI2FromUI4(long ptr) 269 stdcall VarUI2FromDec(ptr ptr)
269 stdcall VarUI2FromDec(ptr ptr) 270 stdcall VarUI4FromUI1(long ptr)
270 stdcall VarUI4FromUI1(long ptr) 271 stdcall VarUI4FromI2(long ptr)
271 stdcall VarUI4FromI2(long ptr) 272 stdcall VarUI4FromI4(long ptr)
272 stdcall VarUI4FromI4(long ptr) 273 stdcall VarUI4FromR4(long ptr)
273 stdcall VarUI4FromR4(long ptr) 274 stdcall VarUI4FromR8(double ptr)
274 stdcall VarUI4FromR8(double ptr) 275 stdcall VarUI4FromDate(double ptr)
275 stdcall VarUI4FromDate(double ptr) 276 stdcall VarUI4FromCy(long long ptr)
276 stdcall VarUI4FromCy(long long ptr) 277 stdcall VarUI4FromStr(wstr long long ptr)
277 stdcall VarUI4FromStr(wstr long long ptr) 278 stdcall VarUI4FromDisp(ptr long ptr)
278 stdcall VarUI4FromDisp(ptr long ptr) 279 stdcall VarUI4FromBool(long ptr)
279 stdcall VarUI4FromBool(long ptr) 280 stdcall VarUI4FromI1(long ptr)
280 stdcall VarUI4FromI1(long ptr) 281 stdcall VarUI4FromUI2(long ptr)
281 stdcall VarUI4FromUI2(long ptr) 282 stdcall VarUI4FromDec(ptr ptr)
282 stdcall VarUI4FromDec(ptr ptr) 283 stdcall BSTR_UserSize(ptr long ptr)
283 stdcall BSTR_UserSize(ptr long ptr) 284 stdcall BSTR_UserMarshal(ptr ptr ptr)
284 stdcall BSTR_UserMarshal(ptr ptr ptr) 285 stdcall BSTR_UserUnmarshal(ptr ptr ptr)
285 stdcall BSTR_UserUnmarshal(ptr ptr ptr) 286 stdcall BSTR_UserFree(ptr ptr)
286 stdcall BSTR_UserFree(ptr ptr) 287 stdcall VARIANT_UserSize(ptr long ptr)
287 stdcall VARIANT_UserSize(ptr long ptr) 288 stdcall VARIANT_UserMarshal(ptr ptr ptr)
288 stdcall VARIANT_UserMarshal(ptr ptr ptr) 289 stdcall VARIANT_UserUnmarshal(ptr ptr ptr)
289 stdcall VARIANT_UserUnmarshal(ptr ptr ptr) 290 stdcall VARIANT_UserFree(ptr ptr)
290 stdcall VARIANT_UserFree(ptr ptr) 291 stub LPSAFEARRAY_UserSize
291 stub LPSAFEARRAY_UserSize 292 stub LPSAFEARRAY_UserMarshal
292 stub LPSAFEARRAY_UserMarshal 293 stub LPSAFEARRAY_UserUnmarshal
293 stub LPSAFEARRAY_UserUnmarshal 294 stub LPSAFEARRAY_UserFree
294 stub LPSAFEARRAY_UserFree 295 stub LPSAFEARRAY_Size
295 stub LPSAFEARRAY_Size 296 stub LPSAFEARRAY_Marshal
296 stub LPSAFEARRAY_Marshal 297 stub LPSAFEARRAY_Unmarshal
297 stub LPSAFEARRAY_Unmarshal 298 stdcall VarDecCmpR8(ptr double)
298 stdcall VarDecCmpR8(ptr double) 299 stdcall VarCyAdd(long long long long ptr)
299 stdcall VarCyAdd(long long long long ptr) 303 stdcall VarCyMul(long long long long ptr)
303 stdcall VarCyMul(long long long long ptr) 304 stdcall VarCyMulI4(long long long ptr)
304 stdcall VarCyMulI4(long long long ptr) 305 stdcall VarCySub(long long long long ptr)
305 stdcall VarCySub(long long long long ptr) 306 stdcall VarCyAbs(long long ptr)
306 stdcall VarCyAbs(long long ptr) 307 stdcall VarCyFix(long long ptr)
307 stdcall VarCyFix(long long ptr) 308 stdcall VarCyInt(long long ptr)
308 stdcall VarCyInt(long long ptr) 309 stdcall VarCyNeg(long long ptr)
309 stdcall VarCyNeg(long long ptr) 310 stdcall VarCyRound(long long long ptr)
310 stdcall VarCyRound(long long long ptr) 311 stdcall VarCyCmp(long long long long)
311 stdcall VarCyCmp(long long long long) 312 stdcall VarCyCmpR8(long long double)
312 stdcall VarCyCmpR8(long long double) 313 stdcall VarBstrCat(wstr wstr ptr)
313 stdcall VarBstrCat(wstr wstr ptr) 314 stdcall VarBstrCmp(wstr wstr long long)
314 stdcall VarBstrCmp(wstr wstr long long) 315 stdcall VarR8Pow(double double ptr)
315 stdcall VarR8Pow(double double ptr) 316 stdcall VarR4CmpR8(long double)
316 stdcall VarR4CmpR8(long double) 317 stdcall VarR8Round(double long ptr)
317 stdcall VarR8Round(double long ptr) 318 stdcall VarCat(ptr ptr ptr)
318 stdcall VarCat(ptr ptr ptr) 319 stdcall VarDateFromUdateEx(ptr long long ptr)
319 stdcall VarDateFromUdateEx(ptr long long ptr) 322 stdcall GetRecordInfoFromGuids(ptr long long long ptr ptr)
320 stdcall -private DllRegisterServer() 323 stdcall GetRecordInfoFromTypeInfo(ptr ptr)
321 stdcall -private DllUnregisterServer() 325 stub SetVarConversionLocaleSetting
322 stdcall GetRecordInfoFromGuids(ptr long long long ptr ptr) 326 stub GetVarConversionLocaleSetting
323 stdcall GetRecordInfoFromTypeInfo(ptr ptr) 327 stdcall SetOaNoCache()
325 stub SetVarConversionLocaleSetting 329 stdcall VarCyMulI8(long long long long ptr)
326 stub GetVarConversionLocaleSetting 330 stdcall VarDateFromUdate(ptr long ptr)
327 stdcall SetOaNoCache() 331 stdcall VarUdateFromDate(double long ptr)
329 stdcall VarCyMulI8(long long long long ptr) 332 stub GetAltMonthNames
330 stdcall VarDateFromUdate(ptr long ptr) 333 stdcall VarI8FromUI1(long long)
331 stdcall VarUdateFromDate(double long ptr) 334 stdcall VarI8FromI2(long long)
332 stub GetAltMonthNames 335 stdcall VarI8FromR4(long long)
333 stdcall VarI8FromUI1(long long) 336 stdcall VarI8FromR8(double long)
334 stdcall VarI8FromI2(long long) 337 stdcall VarI8FromCy(long long ptr)
335 stdcall VarI8FromR4(long long) 338 stdcall VarI8FromDate(double long)
336 stdcall VarI8FromR8(double long) 339 stdcall VarI8FromStr(wstr long long ptr)
337 stdcall VarI8FromCy(long long ptr) 340 stdcall VarI8FromDisp(ptr long ptr)
338 stdcall VarI8FromDate(double long) 341 stdcall VarI8FromBool(long long)
339 stdcall VarI8FromStr(wstr long long ptr) 342 stdcall VarI8FromI1(long long)
340 stdcall VarI8FromDisp(ptr long ptr) 343 stdcall VarI8FromUI2(long long)
341 stdcall VarI8FromBool(long long) 344 stdcall VarI8FromUI4(long long)
342 stdcall VarI8FromI1(long long) 345 stdcall VarI8FromDec(ptr ptr)
343 stdcall VarI8FromUI2(long long) 346 stdcall VarI2FromI8(long long ptr)
344 stdcall VarI8FromUI4(long long) 347 stdcall VarI2FromUI8(long long ptr)
345 stdcall VarI8FromDec(ptr ptr) 348 stdcall VarI4FromI8(long long ptr)
346 stdcall VarI2FromI8(long long ptr) 349 stdcall VarI4FromUI8(long long ptr)
347 stdcall VarI2FromUI8(long long ptr) 360 stdcall VarR4FromI8(long long ptr)
348 stdcall VarI4FromI8(long long ptr) 361 stdcall VarR4FromUI8(long long ptr)
349 stdcall VarI4FromUI8(long long ptr) 362 stdcall VarR8FromI8(long long ptr)
360 stdcall VarR4FromI8(long long ptr) 363 stdcall VarR8FromUI8(long long ptr)
361 stdcall VarR4FromUI8(long long ptr) 364 stdcall VarDateFromI8(long long ptr)
362 stdcall VarR8FromI8(long long ptr) 365 stdcall VarDateFromUI8(long long ptr)
363 stdcall VarR8FromUI8(long long ptr) 366 stdcall VarCyFromI8(long long ptr)
364 stdcall VarDateFromI8(long long ptr) 367 stdcall VarCyFromUI8(long long ptr)
365 stdcall VarDateFromUI8(long long ptr) 368 stdcall VarBstrFromI8(long long long long ptr)
366 stdcall VarCyFromI8(long long ptr) 369 stdcall VarBstrFromUI8(long long long long ptr)
367 stdcall VarCyFromUI8(long long ptr) 370 stdcall VarBoolFromI8(long long ptr)
368 stdcall VarBstrFromI8(long long long long ptr) 371 stdcall VarBoolFromUI8(long long ptr)
369 stdcall VarBstrFromUI8(long long long long ptr) 372 stdcall VarUI1FromI8(long long ptr)
370 stdcall VarBoolFromI8(long long ptr) 373 stdcall VarUI1FromUI8(long long ptr)
371 stdcall VarBoolFromUI8(long long ptr) 374 stdcall VarDecFromI8(long long ptr)
372 stdcall VarUI1FromI8(long long ptr) 375 stdcall VarDecFromUI8(long long ptr)
373 stdcall VarUI1FromUI8(long long ptr) 376 stdcall VarI1FromI8(long long ptr)
374 stdcall VarDecFromI8(long long ptr) 377 stdcall VarI1FromUI8(long long ptr)
375 stdcall VarDecFromUI8(long long ptr) 378 stdcall VarUI2FromI8(long long ptr)
376 stdcall VarI1FromI8(long long ptr) 379 stdcall VarUI2FromUI8(long long ptr)
377 stdcall VarI1FromUI8(long long ptr) 380 stub UserHWND_from_local
378 stdcall VarUI2FromI8(long long ptr) 381 stub UserHWND_to_local
379 stdcall VarUI2FromUI8(long long ptr) 382 stub UserHWND_free_inst
380 stub UserHWND_from_local 383 stub UserHWND_free_local
381 stub UserHWND_to_local 384 stub UserBSTR_from_local
382 stub UserHWND_free_inst 385 stub UserBSTR_to_local
383 stub UserHWND_free_local 386 stub UserBSTR_free_inst
384 stub UserBSTR_from_local 387 stub UserBSTR_free_local
385 stub UserBSTR_to_local 388 stub UserVARIANT_from_local
386 stub UserBSTR_free_inst 389 stub UserVARIANT_to_local
387 stub UserBSTR_free_local 390 stub UserVARIANT_free_inst
388 stub UserVARIANT_from_local 391 stub UserVARIANT_free_local
389 stub UserVARIANT_to_local 392 stub UserEXCEPINFO_from_local
390 stub UserVARIANT_free_inst 393 stub UserEXCEPINFO_to_local
391 stub UserVARIANT_free_local 394 stub UserEXCEPINFO_free_inst
392 stub UserEXCEPINFO_from_local 395 stub UserEXCEPINFO_free_local
393 stub UserEXCEPINFO_to_local 396 stub UserMSG_from_local
394 stub UserEXCEPINFO_free_inst 397 stub UserMSG_to_local
395 stub UserEXCEPINFO_free_local 398 stub UserMSG_free_inst
396 stub UserMSG_from_local 399 stub UserMSG_free_local
397 stub UserMSG_to_local 401 stdcall OleLoadPictureEx(ptr long long long long long long ptr)
398 stub UserMSG_free_inst 402 stub OleLoadPictureFileEx
399 stub UserMSG_free_local 411 stdcall SafeArrayCreateVector(long long long)
401 stdcall OleLoadPictureEx(ptr long long long long long long ptr) 412 stdcall SafeArrayCopyData(ptr ptr)
402 stub OleLoadPictureFileEx 413 stdcall VectorFromBstr(ptr ptr)
410 stdcall -private DllCanUnloadNow() 414 stdcall BstrFromVector(ptr ptr)
411 stdcall SafeArrayCreateVector(long long long) 415 stdcall OleIconToCursor(long long)
412 stdcall SafeArrayCopyData(ptr ptr) 416 stdcall OleCreatePropertyFrameIndirect(ptr)
413 stdcall VectorFromBstr(ptr ptr) 417 stdcall OleCreatePropertyFrame(ptr long long ptr long ptr long ptr ptr long ptr)
414 stdcall BstrFromVector(ptr ptr) 418 stdcall OleLoadPicture(ptr long long ptr ptr)
415 stdcall OleIconToCursor(long long) 419 stdcall OleCreatePictureIndirect(ptr ptr long ptr)
416 stdcall OleCreatePropertyFrameIndirect(ptr) 420 stdcall OleCreateFontIndirect(ptr ptr ptr)
417 stdcall OleCreatePropertyFrame(ptr long long ptr long ptr long ptr ptr long ptr) 421 stdcall OleTranslateColor(long long long)
418 stdcall OleLoadPicture(ptr long long ptr ptr) 422 stub OleLoadPictureFile
419 stdcall OleCreatePictureIndirect(ptr ptr long ptr) 423 stub OleSavePictureFile
420 stdcall OleCreateFontIndirect(ptr ptr ptr) 424 stdcall OleLoadPicturePath(wstr ptr long long ptr ptr)
421 stdcall OleTranslateColor(long long long) 425 stdcall VarUI4FromI8(long long ptr)
422 stub OleLoadPictureFile 426 stdcall VarUI4FromUI8(long long ptr)
423 stub OleSavePictureFile 427 stdcall VarI8FromUI8(long long ptr)
424 stdcall OleLoadPicturePath(wstr ptr long long ptr ptr) 428 stdcall VarUI8FromI8(long long ptr)
425 stdcall VarUI4FromI8(long long ptr) 429 stdcall VarUI8FromUI1(long ptr)
426 stdcall VarUI4FromUI8(long long ptr) 430 stdcall VarUI8FromI2(long ptr)
427 stdcall VarI8FromUI8(long long ptr) 431 stdcall VarUI8FromR4(long ptr)
428 stdcall VarUI8FromI8(long long ptr) 432 stdcall VarUI8FromR8(double ptr)
429 stdcall VarUI8FromUI1(long ptr) 433 stdcall VarUI8FromCy(long long ptr)
430 stdcall VarUI8FromI2(long ptr) 434 stdcall VarUI8FromDate(double ptr)
431 stdcall VarUI8FromR4(long ptr) 435 stdcall VarUI8FromStr(wstr long long ptr)
432 stdcall VarUI8FromR8(double ptr) 436 stdcall VarUI8FromDisp(ptr long ptr)
433 stdcall VarUI8FromCy(long long ptr) 437 stdcall VarUI8FromBool(long ptr)
434 stdcall VarUI8FromDate(double ptr) 438 stdcall VarUI8FromI1(long ptr)
435 stdcall VarUI8FromStr(wstr long long ptr) 439 stdcall VarUI8FromUI2(long ptr)
436 stdcall VarUI8FromDisp(ptr long ptr) 440 stdcall VarUI8FromUI4(long ptr)
437 stdcall VarUI8FromBool(long ptr) 441 stdcall VarUI8FromDec(long ptr)
438 stdcall VarUI8FromI1(long ptr)
439 stdcall VarUI8FromUI2(long ptr) @ stdcall -private DllCanUnloadNow()
440 stdcall VarUI8FromUI4(long ptr) @ stdcall -private DllGetClassObject(ptr ptr ptr)
441 stdcall VarUI8FromDec(long ptr) @ stdcall -private DllRegisterServer()
@ stdcall -private DllUnregisterServer()

View file

@ -63,12 +63,12 @@ struct OLEFontImpl
* The first two are supported by the first vtable, the next two are * The first two are supported by the first vtable, the next two are
* supported by the second table and the last two have their own. * supported by the second table and the last two have their own.
*/ */
const IFontVtbl* lpvtbl1; const IFontVtbl* lpVtbl;
const IDispatchVtbl* lpvtbl2; const IDispatchVtbl* lpvtblIDispatch;
const IPersistStreamVtbl* lpvtbl3; const IPersistStreamVtbl* lpvtblIPersistStream;
const IConnectionPointContainerVtbl* lpvtbl4; const IConnectionPointContainerVtbl* lpvtblIConnectionPointContainer;
const IPersistPropertyBagVtbl* lpvtbl5; const IPersistPropertyBagVtbl* lpvtblIPersistPropertyBag;
const IPersistStreamInitVtbl* lpvtbl6; const IPersistStreamInitVtbl* lpvtblIPersistStreamInit;
/* /*
* Reference count for that instance of the class. * Reference count for that instance of the class.
*/ */
@ -104,11 +104,31 @@ struct OLEFontImpl
* There is a version to accommodate all of the VTables implemented * There is a version to accommodate all of the VTables implemented
* by this object. * by this object.
*/ */
#define _ICOM_THIS_From_IDispatch(class, name) class* this = (class*)(((char*)name)-sizeof(void*))
#define _ICOM_THIS_From_IPersistStream(class, name) class* this = (class*)(((char*)name)-2*sizeof(void*)) static inline OLEFontImpl *impl_from_IDispatch( IDispatch *iface )
#define _ICOM_THIS_From_IConnectionPointContainer(class, name) class* this = (class*)(((char*)name)-3*sizeof(void*)) {
#define _ICOM_THIS_From_IPersistPropertyBag(class, name) class* this = (class*)(((char*)name)-4*sizeof(void*)) return (OLEFontImpl *)((char*)iface - FIELD_OFFSET(OLEFontImpl, lpvtblIDispatch));
#define _ICOM_THIS_From_IPersistStreamInit(class, name) class* this = (class*)(((char*)name)-5*sizeof(void*)) }
static inline OLEFontImpl *impl_from_IPersistStream( IPersistStream *iface )
{
return (OLEFontImpl *)((char*)iface - FIELD_OFFSET(OLEFontImpl, lpvtblIPersistStream));
}
static inline OLEFontImpl *impl_from_IConnectionPointContainer( IConnectionPointContainer *iface )
{
return (OLEFontImpl *)((char*)iface - FIELD_OFFSET(OLEFontImpl, lpvtblIConnectionPointContainer));
}
static inline OLEFontImpl *impl_from_IPersistPropertyBag( IPersistPropertyBag *iface )
{
return (OLEFontImpl *)((char*)iface - FIELD_OFFSET(OLEFontImpl, lpvtblIPersistPropertyBag));
}
static inline OLEFontImpl *impl_from_IPersistStreamInit( IPersistStreamInit *iface )
{
return (OLEFontImpl *)((char*)iface - FIELD_OFFSET(OLEFontImpl, lpvtblIPersistStreamInit));
}
/*********************************************************************** /***********************************************************************
@ -402,12 +422,12 @@ static OLEFontImpl* OLEFontImpl_Construct(LPFONTDESC fontDesc)
/* /*
* Initialize the virtual function table. * Initialize the virtual function table.
*/ */
newObject->lpvtbl1 = &OLEFontImpl_VTable; newObject->lpVtbl = &OLEFontImpl_VTable;
newObject->lpvtbl2 = &OLEFontImpl_IDispatch_VTable; newObject->lpvtblIDispatch = &OLEFontImpl_IDispatch_VTable;
newObject->lpvtbl3 = &OLEFontImpl_IPersistStream_VTable; newObject->lpvtblIPersistStream = &OLEFontImpl_IPersistStream_VTable;
newObject->lpvtbl4 = &OLEFontImpl_IConnectionPointContainer_VTable; newObject->lpvtblIConnectionPointContainer = &OLEFontImpl_IConnectionPointContainer_VTable;
newObject->lpvtbl5 = &OLEFontImpl_IPersistPropertyBag_VTable; newObject->lpvtblIPersistPropertyBag = &OLEFontImpl_IPersistPropertyBag_VTable;
newObject->lpvtbl6 = &OLEFontImpl_IPersistStreamInit_VTable; newObject->lpvtblIPersistStreamInit = &OLEFontImpl_IPersistStreamInit_VTable;
/* /*
* Start with one reference count. The caller of this function * Start with one reference count. The caller of this function
@ -495,17 +515,17 @@ HRESULT WINAPI OLEFontImpl_QueryInterface(
if (IsEqualGUID(&IID_IFont, riid)) if (IsEqualGUID(&IID_IFont, riid))
*ppvObject = (IFont*)this; *ppvObject = (IFont*)this;
if (IsEqualGUID(&IID_IDispatch, riid)) if (IsEqualGUID(&IID_IDispatch, riid))
*ppvObject = (IDispatch*)&(this->lpvtbl2); *ppvObject = (IDispatch*)&(this->lpvtblIDispatch);
if (IsEqualGUID(&IID_IFontDisp, riid)) if (IsEqualGUID(&IID_IFontDisp, riid))
*ppvObject = (IDispatch*)&(this->lpvtbl2); *ppvObject = (IDispatch*)&(this->lpvtblIDispatch);
if (IsEqualGUID(&IID_IPersistStream, riid)) if (IsEqualGUID(&IID_IPersistStream, riid))
*ppvObject = (IPersistStream*)&(this->lpvtbl3); *ppvObject = (IPersistStream*)&(this->lpvtblIPersistStream);
if (IsEqualGUID(&IID_IConnectionPointContainer, riid)) if (IsEqualGUID(&IID_IConnectionPointContainer, riid))
*ppvObject = (IConnectionPointContainer*)&(this->lpvtbl4); *ppvObject = (IConnectionPointContainer*)&(this->lpvtblIConnectionPointContainer);
if (IsEqualGUID(&IID_IPersistPropertyBag, riid)) if (IsEqualGUID(&IID_IPersistPropertyBag, riid))
*ppvObject = (IPersistPropertyBag*)&(this->lpvtbl5); *ppvObject = (IPersistPropertyBag*)&(this->lpvtblIPersistPropertyBag);
if (IsEqualGUID(&IID_IPersistStreamInit, riid)) if (IsEqualGUID(&IID_IPersistStreamInit, riid))
*ppvObject = (IPersistStreamInit*)&(this->lpvtbl6); *ppvObject = (IPersistStreamInit*)&(this->lpvtblIPersistStreamInit);
/* /*
* Check that we obtained an interface. * Check that we obtained an interface.
@ -933,7 +953,9 @@ static HRESULT WINAPI OLEFontImpl_get_hFont(
*/ */
IFont_get_Size(iface, &cySize); IFont_get_Size(iface, &cySize);
fontHeight = MulDiv( cySize.s.Lo, this->cyLogical, this->cyHimetric ); /* Standard ratio is 72 / 2540, or 18 / 635 in lowest terms. */
/* Ratio is applied here relative to the standard. */
fontHeight = MulDiv( cySize.s.Lo, this->cyLogical*635, this->cyHimetric*18 );
memset(&logFont, 0, sizeof(LOGFONTW)); memset(&logFont, 0, sizeof(LOGFONTW));
@ -1000,7 +1022,7 @@ static HRESULT WINAPI OLEFontImpl_Clone(
/* We need to clone the HFONT too. This is just cut & paste from above */ /* We need to clone the HFONT too. This is just cut & paste from above */
IFont_get_Size(iface, &cySize); IFont_get_Size(iface, &cySize);
fontHeight = MulDiv(cySize.s.Lo, this->cyLogical,this->cyHimetric); fontHeight = MulDiv(cySize.s.Lo, this->cyLogical*635,this->cyHimetric*18);
memset(&logFont, 0, sizeof(LOGFONTW)); memset(&logFont, 0, sizeof(LOGFONTW));
@ -1156,9 +1178,9 @@ static HRESULT WINAPI OLEFontImpl_IDispatch_QueryInterface(
REFIID riid, REFIID riid,
VOID** ppvoid) VOID** ppvoid)
{ {
_ICOM_THIS_From_IDispatch(IFont, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
return IFont_QueryInterface(this, riid, ppvoid); return IFont_QueryInterface((IFont *)this, riid, ppvoid);
} }
/************************************************************************ /************************************************************************
@ -1169,9 +1191,9 @@ static HRESULT WINAPI OLEFontImpl_IDispatch_QueryInterface(
static ULONG WINAPI OLEFontImpl_IDispatch_Release( static ULONG WINAPI OLEFontImpl_IDispatch_Release(
IDispatch* iface) IDispatch* iface)
{ {
_ICOM_THIS_From_IDispatch(IFont, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
return IFont_Release(this); return IFont_Release((IFont *)this);
} }
/************************************************************************ /************************************************************************
@ -1182,9 +1204,9 @@ static ULONG WINAPI OLEFontImpl_IDispatch_Release(
static ULONG WINAPI OLEFontImpl_IDispatch_AddRef( static ULONG WINAPI OLEFontImpl_IDispatch_AddRef(
IDispatch* iface) IDispatch* iface)
{ {
_ICOM_THIS_From_IDispatch(IFont, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
return IFont_AddRef(this); return IFont_AddRef((IFont *)this);
} }
/************************************************************************ /************************************************************************
@ -1196,7 +1218,7 @@ static HRESULT WINAPI OLEFontImpl_GetTypeInfoCount(
IDispatch* iface, IDispatch* iface,
unsigned int* pctinfo) unsigned int* pctinfo)
{ {
_ICOM_THIS_From_IDispatch(IFont, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
FIXME("(%p)->(%p): Stub\n", this, pctinfo); FIXME("(%p)->(%p): Stub\n", this, pctinfo);
return E_NOTIMPL; return E_NOTIMPL;
@ -1217,7 +1239,7 @@ static HRESULT WINAPI OLEFontImpl_GetTypeInfo(
ITypeLib *tl; ITypeLib *tl;
HRESULT hres; HRESULT hres;
_ICOM_THIS_From_IDispatch(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
TRACE("(%p, iTInfo=%d, lcid=%04x, %p)\n", this, iTInfo, (int)lcid, ppTInfo); TRACE("(%p, iTInfo=%d, lcid=%04x, %p)\n", this, iTInfo, (int)lcid, ppTInfo);
if (iTInfo != 0) if (iTInfo != 0)
return E_FAIL; return E_FAIL;
@ -1246,7 +1268,7 @@ static HRESULT WINAPI OLEFontImpl_GetIDsOfNames(
LCID lcid, LCID lcid,
DISPID* rgDispId) DISPID* rgDispId)
{ {
_ICOM_THIS_From_IDispatch(IFont, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
FIXME("(%p,%s,%p,%d,%04x,%p), stub!\n", this, debugstr_guid(riid), rgszNames, FIXME("(%p,%s,%p,%d,%04x,%p), stub!\n", this, debugstr_guid(riid), rgszNames,
cNames, (int)lcid, rgDispId cNames, (int)lcid, rgDispId
); );
@ -1273,7 +1295,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
EXCEPINFO* pExepInfo, EXCEPINFO* pExepInfo,
UINT* puArgErr) UINT* puArgErr)
{ {
_ICOM_THIS_From_IDispatch(IFont, iface); OLEFontImpl *this = impl_from_IDispatch(iface);
OLEFontImpl *xthis = (OLEFontImpl*)this; OLEFontImpl *xthis = (OLEFontImpl*)this;
switch (dispIdMember) { switch (dispIdMember) {
@ -1282,7 +1304,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_BSTR; V_VT(pVarResult) = VT_BSTR;
return OLEFontImpl_get_Name(this, &V_BSTR(pVarResult)); return OLEFontImpl_get_Name((IFont *)this, &V_BSTR(pVarResult));
case DISPATCH_PROPERTYPUT: { case DISPATCH_PROPERTYPUT: {
BSTR name; BSTR name;
BOOL freename; BOOL freename;
@ -1334,7 +1356,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_BOOL; V_VT(pVarResult) = VT_BOOL;
return OLEFontImpl_get_Bold(this, (BOOL*)&V_BOOL(pVarResult)); return OLEFontImpl_get_Bold((IFont *)this, (BOOL*)&V_BOOL(pVarResult));
case DISPATCH_PROPERTYPUT: case DISPATCH_PROPERTYPUT:
if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) { if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) {
FIXME("DISPID_FONT_BOLD/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0])); FIXME("DISPID_FONT_BOLD/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0]));
@ -1350,7 +1372,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_BOOL; V_VT(pVarResult) = VT_BOOL;
return OLEFontImpl_get_Italic(this, (BOOL*)&V_BOOL(pVarResult)); return OLEFontImpl_get_Italic((IFont *)this, (BOOL*)&V_BOOL(pVarResult));
case DISPATCH_PROPERTYPUT: case DISPATCH_PROPERTYPUT:
if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) { if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) {
FIXME("DISPID_FONT_ITALIC/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0])); FIXME("DISPID_FONT_ITALIC/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0]));
@ -1366,7 +1388,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_BOOL; V_VT(pVarResult) = VT_BOOL;
return OLEFontImpl_get_Underline(this, (BOOL*)&V_BOOL(pVarResult)); return OLEFontImpl_get_Underline((IFont *)this, (BOOL*)&V_BOOL(pVarResult));
case DISPATCH_PROPERTYPUT: case DISPATCH_PROPERTYPUT:
if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) { if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) {
FIXME("DISPID_FONT_UNDER/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0])); FIXME("DISPID_FONT_UNDER/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0]));
@ -1382,7 +1404,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_BOOL; V_VT(pVarResult) = VT_BOOL;
return OLEFontImpl_get_Strikethrough(this, (BOOL*)&V_BOOL(pVarResult)); return OLEFontImpl_get_Strikethrough((IFont *)this, (BOOL*)&V_BOOL(pVarResult));
case DISPATCH_PROPERTYPUT: case DISPATCH_PROPERTYPUT:
if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) { if (V_VT(&pDispParams->rgvarg[0]) != VT_BOOL) {
FIXME("DISPID_FONT_STRIKE/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0])); FIXME("DISPID_FONT_STRIKE/put, vt is %d, not VT_BOOL.\n",V_VT(&pDispParams->rgvarg[0]));
@ -1412,7 +1434,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_CY; V_VT(pVarResult) = VT_CY;
return OLEFontImpl_get_Size(this, &V_CY(pVarResult)); return OLEFontImpl_get_Size((IFont *)this, &V_CY(pVarResult));
} }
break; break;
case DISPID_FONT_CHARSET: case DISPID_FONT_CHARSET:
@ -1426,7 +1448,7 @@ static HRESULT WINAPI OLEFontImpl_Invoke(
case DISPATCH_PROPERTYGET: case DISPATCH_PROPERTYGET:
case DISPATCH_PROPERTYGET|DISPATCH_METHOD: case DISPATCH_PROPERTYGET|DISPATCH_METHOD:
V_VT(pVarResult) = VT_I2; V_VT(pVarResult) = VT_I2;
return OLEFontImpl_get_Charset(this, &V_I2(pVarResult)); return OLEFontImpl_get_Charset((IFont *)this, &V_I2(pVarResult));
} }
break; break;
} }
@ -1447,9 +1469,9 @@ static HRESULT WINAPI OLEFontImpl_IPersistStream_QueryInterface(
REFIID riid, REFIID riid,
VOID** ppvoid) VOID** ppvoid)
{ {
_ICOM_THIS_From_IPersistStream(IFont, iface); OLEFontImpl *this = impl_from_IPersistStream(iface);
return IFont_QueryInterface(this, riid, ppvoid); return IFont_QueryInterface((IFont *)this, riid, ppvoid);
} }
/************************************************************************ /************************************************************************
@ -1460,9 +1482,9 @@ static HRESULT WINAPI OLEFontImpl_IPersistStream_QueryInterface(
static ULONG WINAPI OLEFontImpl_IPersistStream_Release( static ULONG WINAPI OLEFontImpl_IPersistStream_Release(
IPersistStream* iface) IPersistStream* iface)
{ {
_ICOM_THIS_From_IPersistStream(IFont, iface); OLEFontImpl *this = impl_from_IPersistStream(iface);
return IFont_Release(this); return IFont_Release((IFont *)this);
} }
/************************************************************************ /************************************************************************
@ -1473,9 +1495,9 @@ static ULONG WINAPI OLEFontImpl_IPersistStream_Release(
static ULONG WINAPI OLEFontImpl_IPersistStream_AddRef( static ULONG WINAPI OLEFontImpl_IPersistStream_AddRef(
IPersistStream* iface) IPersistStream* iface)
{ {
_ICOM_THIS_From_IPersistStream(IFont, iface); OLEFontImpl *this = impl_from_IPersistStream(iface);
return IFont_AddRef(this); return IFont_AddRef((IFont *)this);
} }
/************************************************************************ /************************************************************************
@ -1540,7 +1562,7 @@ static HRESULT WINAPI OLEFontImpl_Load(
BYTE bStringSize; BYTE bStringSize;
INT len; INT len;
_ICOM_THIS_From_IPersistStream(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IPersistStream(iface);
/* /*
* Read the version byte * Read the version byte
@ -1632,7 +1654,7 @@ static HRESULT WINAPI OLEFontImpl_Save(
BYTE bAttributes; BYTE bAttributes;
BYTE bStringSize; BYTE bStringSize;
_ICOM_THIS_From_IPersistStream(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IPersistStream(iface);
/* /*
* Read the version byte * Read the version byte
@ -1725,7 +1747,7 @@ static HRESULT WINAPI OLEFontImpl_GetSizeMax(
IPersistStream* iface, IPersistStream* iface,
ULARGE_INTEGER* pcbSize) ULARGE_INTEGER* pcbSize)
{ {
_ICOM_THIS_From_IPersistStream(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IPersistStream(iface);
if (pcbSize==NULL) if (pcbSize==NULL)
return E_POINTER; return E_POINTER;
@ -1756,7 +1778,7 @@ static HRESULT WINAPI OLEFontImpl_IConnectionPointContainer_QueryInterface(
REFIID riid, REFIID riid,
VOID** ppvoid) VOID** ppvoid)
{ {
_ICOM_THIS_From_IConnectionPointContainer(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IConnectionPointContainer(iface);
return IFont_QueryInterface((IFont*)this, riid, ppvoid); return IFont_QueryInterface((IFont*)this, riid, ppvoid);
} }
@ -1769,7 +1791,7 @@ static HRESULT WINAPI OLEFontImpl_IConnectionPointContainer_QueryInterface(
static ULONG WINAPI OLEFontImpl_IConnectionPointContainer_Release( static ULONG WINAPI OLEFontImpl_IConnectionPointContainer_Release(
IConnectionPointContainer* iface) IConnectionPointContainer* iface)
{ {
_ICOM_THIS_From_IConnectionPointContainer(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IConnectionPointContainer(iface);
return IFont_Release((IFont*)this); return IFont_Release((IFont*)this);
} }
@ -1782,7 +1804,7 @@ static ULONG WINAPI OLEFontImpl_IConnectionPointContainer_Release(
static ULONG WINAPI OLEFontImpl_IConnectionPointContainer_AddRef( static ULONG WINAPI OLEFontImpl_IConnectionPointContainer_AddRef(
IConnectionPointContainer* iface) IConnectionPointContainer* iface)
{ {
_ICOM_THIS_From_IConnectionPointContainer(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IConnectionPointContainer(iface);
return IFont_AddRef((IFont*)this); return IFont_AddRef((IFont*)this);
} }
@ -1797,7 +1819,7 @@ static HRESULT WINAPI OLEFontImpl_EnumConnectionPoints(
IConnectionPointContainer* iface, IConnectionPointContainer* iface,
IEnumConnectionPoints **ppEnum) IEnumConnectionPoints **ppEnum)
{ {
_ICOM_THIS_From_IConnectionPointContainer(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IConnectionPointContainer(iface);
FIXME("(%p)->(%p): stub\n", this, ppEnum); FIXME("(%p)->(%p): stub\n", this, ppEnum);
return E_NOTIMPL; return E_NOTIMPL;
@ -1814,7 +1836,7 @@ static HRESULT WINAPI OLEFontImpl_FindConnectionPoint(
REFIID riid, REFIID riid,
IConnectionPoint **ppCp) IConnectionPoint **ppCp)
{ {
_ICOM_THIS_From_IConnectionPointContainer(OLEFontImpl, iface); OLEFontImpl *this = impl_from_IConnectionPointContainer(iface);
TRACE("(%p)->(%s, %p): stub\n", this, debugstr_guid(riid), ppCp); TRACE("(%p)->(%s, %p): stub\n", this, debugstr_guid(riid), ppCp);
if(memcmp(riid, &IID_IPropertyNotifySink, sizeof(IID_IPropertyNotifySink)) == 0) { if(memcmp(riid, &IID_IPropertyNotifySink, sizeof(IID_IPropertyNotifySink)) == 0) {
@ -1832,22 +1854,22 @@ static HRESULT WINAPI OLEFontImpl_FindConnectionPoint(
static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_QueryInterface( static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_QueryInterface(
IPersistPropertyBag *iface, REFIID riid, LPVOID *ppvObj IPersistPropertyBag *iface, REFIID riid, LPVOID *ppvObj
) { ) {
_ICOM_THIS_From_IPersistPropertyBag(IFont, iface); OLEFontImpl *this = impl_from_IPersistPropertyBag(iface);
return IFont_QueryInterface(this,riid,ppvObj); return IFont_QueryInterface((IFont *)this,riid,ppvObj);
} }
static ULONG WINAPI OLEFontImpl_IPersistPropertyBag_AddRef( static ULONG WINAPI OLEFontImpl_IPersistPropertyBag_AddRef(
IPersistPropertyBag *iface IPersistPropertyBag *iface
) { ) {
_ICOM_THIS_From_IPersistPropertyBag(IFont, iface); OLEFontImpl *this = impl_from_IPersistPropertyBag(iface);
return IFont_AddRef(this); return IFont_AddRef((IFont *)this);
} }
static ULONG WINAPI OLEFontImpl_IPersistPropertyBag_Release( static ULONG WINAPI OLEFontImpl_IPersistPropertyBag_Release(
IPersistPropertyBag *iface IPersistPropertyBag *iface
) { ) {
_ICOM_THIS_From_IPersistPropertyBag(IFont, iface); OLEFontImpl *this = impl_from_IPersistPropertyBag(iface);
return IFont_Release(this); return IFont_Release((IFont *)this);
} }
static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_GetClassID( static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_GetClassID(
@ -1886,7 +1908,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
VARIANT rawAttr; VARIANT rawAttr;
VARIANT valueAttr; VARIANT valueAttr;
HRESULT iRes = S_OK; HRESULT iRes = S_OK;
_ICOM_THIS_From_IPersistPropertyBag(IFont, iface); OLEFontImpl *this = impl_from_IPersistPropertyBag(iface);
VariantInit(&rawAttr); VariantInit(&rawAttr);
VariantInit(&valueAttr); VariantInit(&valueAttr);
@ -1897,7 +1919,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BSTR); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BSTR);
if (iRes == S_OK) if (iRes == S_OK)
iRes = IFont_put_Name(this, V_BSTR(&valueAttr)); iRes = IFont_put_Name((IFont *)this, V_BSTR(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -1911,7 +1933,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_CY); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_CY);
if (iRes == S_OK) if (iRes == S_OK)
iRes = IFont_put_Size(this, V_CY(&valueAttr)); iRes = IFont_put_Size((IFont *)this, V_CY(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -1925,7 +1947,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_I2); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_I2);
if (iRes == S_OK) if (iRes == S_OK)
iRes = IFont_put_Charset(this, V_I2(&valueAttr)); iRes = IFont_put_Charset((IFont *)this, V_I2(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -1939,7 +1961,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_I2); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_I2);
if (iRes == S_OK) if (iRes == S_OK)
iRes = IFont_put_Weight(this, V_I2(&valueAttr)); iRes = IFont_put_Weight((IFont *)this, V_I2(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -1954,7 +1976,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL);
if (iRes == S_OK) if (iRes == S_OK)
iRes = IFont_put_Underline(this, V_BOOL(&valueAttr)); iRes = IFont_put_Underline((IFont *)this, V_BOOL(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -1968,7 +1990,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL);
if (iRes == S_OK) if (iRes == S_OK)
iRes = IFont_put_Italic(this, V_BOOL(&valueAttr)); iRes = IFont_put_Italic((IFont *)this, V_BOOL(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -1982,7 +2004,7 @@ static HRESULT WINAPI OLEFontImpl_IPersistPropertyBag_Load(
{ {
iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL); iRes = VariantChangeType(&rawAttr, &valueAttr, 0, VT_BOOL);
if (iRes == S_OK) if (iRes == S_OK)
IFont_put_Strikethrough(this, V_BOOL(&valueAttr)); IFont_put_Strikethrough((IFont *)this, V_BOOL(&valueAttr));
} }
else if (iRes == E_INVALIDARG) else if (iRes == E_INVALIDARG)
iRes = S_OK; iRes = S_OK;
@ -2021,22 +2043,22 @@ static const IPersistPropertyBagVtbl OLEFontImpl_IPersistPropertyBag_VTable =
static HRESULT WINAPI OLEFontImpl_IPersistStreamInit_QueryInterface( static HRESULT WINAPI OLEFontImpl_IPersistStreamInit_QueryInterface(
IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj IPersistStreamInit *iface, REFIID riid, LPVOID *ppvObj
) { ) {
_ICOM_THIS_From_IPersistStreamInit(IFont, iface); OLEFontImpl *this = impl_from_IPersistStreamInit(iface);
return IFont_QueryInterface(this,riid,ppvObj); return IFont_QueryInterface((IFont *)this,riid,ppvObj);
} }
static ULONG WINAPI OLEFontImpl_IPersistStreamInit_AddRef( static ULONG WINAPI OLEFontImpl_IPersistStreamInit_AddRef(
IPersistStreamInit *iface IPersistStreamInit *iface
) { ) {
_ICOM_THIS_From_IPersistStreamInit(IFont, iface); OLEFontImpl *this = impl_from_IPersistStreamInit(iface);
return IFont_AddRef(this); return IFont_AddRef((IFont *)this);
} }
static ULONG WINAPI OLEFontImpl_IPersistStreamInit_Release( static ULONG WINAPI OLEFontImpl_IPersistStreamInit_Release(
IPersistStreamInit *iface IPersistStreamInit *iface
) { ) {
_ICOM_THIS_From_IPersistStreamInit(IFont, iface); OLEFontImpl *this = impl_from_IPersistStreamInit(iface);
return IFont_Release(this); return IFont_Release((IFont *)this);
} }
static HRESULT WINAPI OLEFontImpl_IPersistStreamInit_GetClassID( static HRESULT WINAPI OLEFontImpl_IPersistStreamInit_GetClassID(

View file

@ -125,10 +125,10 @@ typedef struct OLEPictureImpl {
* IPicture handles IUnknown * IPicture handles IUnknown
*/ */
const IPictureVtbl *lpvtbl1; const IPictureVtbl *lpVtbl;
const IDispatchVtbl *lpvtbl2; const IDispatchVtbl *lpvtblIDispatch;
const IPersistStreamVtbl *lpvtbl3; const IPersistStreamVtbl *lpvtblIPersistStream;
const IConnectionPointContainerVtbl *lpvtbl4; const IConnectionPointContainerVtbl *lpvtblIConnectionPointContainer;
/* Object reference count */ /* Object reference count */
LONG ref; LONG ref;
@ -168,12 +168,21 @@ typedef struct OLEPictureImpl {
/* /*
* Macros to retrieve pointer to IUnknown (IPicture) from the other VTables. * Macros to retrieve pointer to IUnknown (IPicture) from the other VTables.
*/ */
#define ICOM_THIS_From_IDispatch(impl, name) \
impl *This = (impl*)(((char*)name)-sizeof(void*)); static inline OLEPictureImpl *impl_from_IDispatch( IDispatch *iface )
#define ICOM_THIS_From_IPersistStream(impl, name) \ {
impl *This = (impl*)(((char*)name)-2*sizeof(void*)); return (OLEPictureImpl *)((char*)iface - FIELD_OFFSET(OLEPictureImpl, lpvtblIDispatch));
#define ICOM_THIS_From_IConnectionPointContainer(impl, name) \ }
impl *This = (impl*)(((char*)name)-3*sizeof(void*));
static inline OLEPictureImpl *impl_from_IPersistStream( IPersistStream *iface )
{
return (OLEPictureImpl *)((char*)iface - FIELD_OFFSET(OLEPictureImpl, lpvtblIPersistStream));
}
static inline OLEPictureImpl *impl_from_IConnectionPointContainer( IConnectionPointContainer *iface )
{
return (OLEPictureImpl *)((char*)iface - FIELD_OFFSET(OLEPictureImpl, lpvtblIConnectionPointContainer));
}
/* /*
* Predeclare VTables. They get initialized at the end. * Predeclare VTables. They get initialized at the end.
@ -265,10 +274,10 @@ static OLEPictureImpl* OLEPictureImpl_Construct(LPPICTDESC pictDesc, BOOL fOwn)
/* /*
* Initialize the virtual function table. * Initialize the virtual function table.
*/ */
newObject->lpvtbl1 = &OLEPictureImpl_VTable; newObject->lpVtbl = &OLEPictureImpl_VTable;
newObject->lpvtbl2 = &OLEPictureImpl_IDispatch_VTable; newObject->lpvtblIDispatch = &OLEPictureImpl_IDispatch_VTable;
newObject->lpvtbl3 = &OLEPictureImpl_IPersistStream_VTable; newObject->lpvtblIPersistStream = &OLEPictureImpl_IPersistStream_VTable;
newObject->lpvtbl4 = &OLEPictureImpl_IConnectionPointContainer_VTable; newObject->lpvtblIConnectionPointContainer = &OLEPictureImpl_IConnectionPointContainer_VTable;
CreateConnectionPoint((IUnknown*)newObject,&IID_IPropertyNotifySink,&newObject->pCP); CreateConnectionPoint((IUnknown*)newObject,&IID_IPropertyNotifySink,&newObject->pCP);
@ -407,19 +416,19 @@ static HRESULT WINAPI OLEPictureImpl_QueryInterface(
} }
else if (memcmp(&IID_IDispatch, riid, sizeof(IID_IDispatch)) == 0) else if (memcmp(&IID_IDispatch, riid, sizeof(IID_IDispatch)) == 0)
{ {
*ppvObject = (IDispatch*)&(This->lpvtbl2); *ppvObject = (IDispatch*)&(This->lpvtblIDispatch);
} }
else if (memcmp(&IID_IPictureDisp, riid, sizeof(IID_IPictureDisp)) == 0) else if (memcmp(&IID_IPictureDisp, riid, sizeof(IID_IPictureDisp)) == 0)
{ {
*ppvObject = (IDispatch*)&(This->lpvtbl2); *ppvObject = (IDispatch*)&(This->lpvtblIDispatch);
} }
else if (memcmp(&IID_IPersistStream, riid, sizeof(IID_IPersistStream)) == 0) else if (memcmp(&IID_IPersistStream, riid, sizeof(IID_IPersistStream)) == 0)
{ {
*ppvObject = (IPersistStream*)&(This->lpvtbl3); *ppvObject = (IPersistStream*)&(This->lpvtblIPersistStream);
} }
else if (memcmp(&IID_IConnectionPointContainer, riid, sizeof(IID_IConnectionPointContainer)) == 0) else if (memcmp(&IID_IConnectionPointContainer, riid, sizeof(IID_IConnectionPointContainer)) == 0)
{ {
*ppvObject = (IConnectionPointContainer*)&(This->lpvtbl4); *ppvObject = (IConnectionPointContainer*)&(This->lpvtblIConnectionPointContainer);
} }
/* /*
* Check that we obtained an interface. * Check that we obtained an interface.
@ -540,10 +549,34 @@ static HRESULT WINAPI OLEPictureImpl_get_hPal(IPicture *iface,
OLE_HANDLE *phandle) OLE_HANDLE *phandle)
{ {
OLEPictureImpl *This = (OLEPictureImpl *)iface; OLEPictureImpl *This = (OLEPictureImpl *)iface;
FIXME("(%p)->(%p): stub, return 0 palette.\n", This, phandle); HRESULT hres;
TRACE("(%p)->(%p)\n", This, phandle);
*phandle = 0; if (!phandle)
return S_OK; return E_POINTER;
switch (This->desc.picType) {
case PICTYPE_UNINITIALIZED:
case PICTYPE_NONE:
*phandle = 0;
hres = S_FALSE;
break;
case PICTYPE_BITMAP:
*phandle = (OLE_HANDLE)This->desc.u.bmp.hpal;
hres = S_OK;
break;
case PICTYPE_ICON:
case PICTYPE_METAFILE:
case PICTYPE_ENHMETAFILE:
default:
FIXME("unimplemented for type %d. Returning 0 palette.\n",
This->desc.picType);
*phandle = 0;
hres = S_OK;
}
TRACE("returning 0x%08lx, palette handle %08x\n", hres, *phandle);
return hres;
} }
/************************************************************************ /************************************************************************
@ -791,34 +824,34 @@ static HRESULT WINAPI OLEPictureImpl_get_Attributes(IPicture *iface,
static HRESULT WINAPI OLEPictureImpl_IConnectionPointContainer_QueryInterface( static HRESULT WINAPI OLEPictureImpl_IConnectionPointContainer_QueryInterface(
IConnectionPointContainer* iface, IConnectionPointContainer* iface,
REFIID riid, REFIID riid,
VOID** ppvoid VOID** ppvoid)
) { {
ICOM_THIS_From_IConnectionPointContainer(IPicture,iface); OLEPictureImpl *This = impl_from_IConnectionPointContainer(iface);
return IPicture_QueryInterface(This,riid,ppvoid); return IPicture_QueryInterface((IPicture *)This,riid,ppvoid);
} }
static ULONG WINAPI OLEPictureImpl_IConnectionPointContainer_AddRef( static ULONG WINAPI OLEPictureImpl_IConnectionPointContainer_AddRef(
IConnectionPointContainer* iface) IConnectionPointContainer* iface)
{ {
ICOM_THIS_From_IConnectionPointContainer(IPicture, iface); OLEPictureImpl *This = impl_from_IConnectionPointContainer(iface);
return IPicture_AddRef(This); return IPicture_AddRef((IPicture *)This);
} }
static ULONG WINAPI OLEPictureImpl_IConnectionPointContainer_Release( static ULONG WINAPI OLEPictureImpl_IConnectionPointContainer_Release(
IConnectionPointContainer* iface) IConnectionPointContainer* iface)
{ {
ICOM_THIS_From_IConnectionPointContainer(IPicture, iface); OLEPictureImpl *This = impl_from_IConnectionPointContainer(iface);
return IPicture_Release(This); return IPicture_Release((IPicture *)This);
} }
static HRESULT WINAPI OLEPictureImpl_EnumConnectionPoints( static HRESULT WINAPI OLEPictureImpl_EnumConnectionPoints(
IConnectionPointContainer* iface, IConnectionPointContainer* iface,
IEnumConnectionPoints** ppEnum IEnumConnectionPoints** ppEnum)
) { {
ICOM_THIS_From_IConnectionPointContainer(IPicture, iface); OLEPictureImpl *This = impl_from_IConnectionPointContainer(iface);
FIXME("(%p,%p), stub!\n",This,ppEnum); FIXME("(%p,%p), stub!\n",This,ppEnum);
return E_NOTIMPL; return E_NOTIMPL;
@ -827,9 +860,9 @@ static HRESULT WINAPI OLEPictureImpl_EnumConnectionPoints(
static HRESULT WINAPI OLEPictureImpl_FindConnectionPoint( static HRESULT WINAPI OLEPictureImpl_FindConnectionPoint(
IConnectionPointContainer* iface, IConnectionPointContainer* iface,
REFIID riid, REFIID riid,
IConnectionPoint **ppCP IConnectionPoint **ppCP)
) { {
ICOM_THIS_From_IConnectionPointContainer(OLEPictureImpl, iface); OLEPictureImpl *This = impl_from_IConnectionPointContainer(iface);
TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppCP); TRACE("(%p,%s,%p)\n",This,debugstr_guid(riid),ppCP);
if (!ppCP) if (!ppCP)
return E_POINTER; return E_POINTER;
@ -852,9 +885,9 @@ static HRESULT WINAPI OLEPictureImpl_IPersistStream_QueryInterface(
REFIID riid, REFIID riid,
VOID** ppvoid) VOID** ppvoid)
{ {
ICOM_THIS_From_IPersistStream(IPicture, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
return IPicture_QueryInterface(This, riid, ppvoid); return IPicture_QueryInterface((IPicture *)This, riid, ppvoid);
} }
/************************************************************************ /************************************************************************
@ -865,9 +898,9 @@ static HRESULT WINAPI OLEPictureImpl_IPersistStream_QueryInterface(
static ULONG WINAPI OLEPictureImpl_IPersistStream_AddRef( static ULONG WINAPI OLEPictureImpl_IPersistStream_AddRef(
IPersistStream* iface) IPersistStream* iface)
{ {
ICOM_THIS_From_IPersistStream(IPicture, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
return IPicture_AddRef(This); return IPicture_AddRef((IPicture *)This);
} }
/************************************************************************ /************************************************************************
@ -878,9 +911,9 @@ static ULONG WINAPI OLEPictureImpl_IPersistStream_AddRef(
static ULONG WINAPI OLEPictureImpl_IPersistStream_Release( static ULONG WINAPI OLEPictureImpl_IPersistStream_Release(
IPersistStream* iface) IPersistStream* iface)
{ {
ICOM_THIS_From_IPersistStream(IPicture, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
return IPicture_Release(This); return IPicture_Release((IPicture *)This);
} }
/************************************************************************ /************************************************************************
@ -889,7 +922,7 @@ static ULONG WINAPI OLEPictureImpl_IPersistStream_Release(
static HRESULT WINAPI OLEPictureImpl_GetClassID( static HRESULT WINAPI OLEPictureImpl_GetClassID(
IPersistStream* iface,CLSID* pClassID) IPersistStream* iface,CLSID* pClassID)
{ {
ICOM_THIS_From_IPersistStream(IPicture, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
FIXME("(%p),stub!\n",This); FIXME("(%p),stub!\n",This);
return E_FAIL; return E_FAIL;
} }
@ -900,7 +933,7 @@ static HRESULT WINAPI OLEPictureImpl_GetClassID(
static HRESULT WINAPI OLEPictureImpl_IsDirty( static HRESULT WINAPI OLEPictureImpl_IsDirty(
IPersistStream* iface) IPersistStream* iface)
{ {
ICOM_THIS_From_IPersistStream(IPicture, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
FIXME("(%p),stub!\n",This); FIXME("(%p),stub!\n",This);
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1028,7 +1061,7 @@ static HRESULT WINAPI OLEPictureImpl_Load(IPersistStream* iface,IStream*pStm) {
DWORD header[2]; DWORD header[2];
WORD magic; WORD magic;
STATSTG statstg; STATSTG statstg;
ICOM_THIS_From_IPersistStream(OLEPictureImpl, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
TRACE("(%p,%p)\n",This,pStm); TRACE("(%p,%p)\n",This,pStm);
@ -1519,7 +1552,7 @@ static HRESULT WINAPI OLEPictureImpl_Save(
ULONG dummy; ULONG dummy;
int iSerializeResult = 0; int iSerializeResult = 0;
ICOM_THIS_From_IPersistStream(OLEPictureImpl, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
switch (This->desc.picType) { switch (This->desc.picType) {
case PICTYPE_ICON: case PICTYPE_ICON:
@ -1837,7 +1870,7 @@ static int serializeIcon(HICON hIcon, void ** ppBuffer, unsigned int * pLength)
static HRESULT WINAPI OLEPictureImpl_GetSizeMax( static HRESULT WINAPI OLEPictureImpl_GetSizeMax(
IPersistStream* iface,ULARGE_INTEGER*pcbSize) IPersistStream* iface,ULARGE_INTEGER*pcbSize)
{ {
ICOM_THIS_From_IPersistStream(IPicture, iface); OLEPictureImpl *This = impl_from_IPersistStream(iface);
FIXME("(%p,%p),stub!\n",This,pcbSize); FIXME("(%p,%p),stub!\n",This,pcbSize);
return E_NOTIMPL; return E_NOTIMPL;
} }
@ -1855,9 +1888,9 @@ static HRESULT WINAPI OLEPictureImpl_IDispatch_QueryInterface(
REFIID riid, REFIID riid,
VOID** ppvoid) VOID** ppvoid)
{ {
ICOM_THIS_From_IDispatch(IPicture, iface); OLEPictureImpl *This = impl_from_IDispatch(iface);
return IPicture_QueryInterface(This, riid, ppvoid); return IPicture_QueryInterface((IPicture *)This, riid, ppvoid);
} }
/************************************************************************ /************************************************************************
@ -1868,9 +1901,9 @@ static HRESULT WINAPI OLEPictureImpl_IDispatch_QueryInterface(
static ULONG WINAPI OLEPictureImpl_IDispatch_AddRef( static ULONG WINAPI OLEPictureImpl_IDispatch_AddRef(
IDispatch* iface) IDispatch* iface)
{ {
ICOM_THIS_From_IDispatch(IPicture, iface); OLEPictureImpl *This = impl_from_IDispatch(iface);
return IPicture_AddRef(This); return IPicture_AddRef((IPicture *)This);
} }
/************************************************************************ /************************************************************************
@ -1881,9 +1914,9 @@ static ULONG WINAPI OLEPictureImpl_IDispatch_AddRef(
static ULONG WINAPI OLEPictureImpl_IDispatch_Release( static ULONG WINAPI OLEPictureImpl_IDispatch_Release(
IDispatch* iface) IDispatch* iface)
{ {
ICOM_THIS_From_IDispatch(IPicture, iface); OLEPictureImpl *This = impl_from_IDispatch(iface);
return IPicture_Release(This); return IPicture_Release((IPicture *)This);
} }
/************************************************************************ /************************************************************************

View file

@ -901,7 +901,7 @@ static struct regsvr_interface const interface_list[] = {
}; };
/*********************************************************************** /***********************************************************************
* DllRegisterServer (OLEAUT32.320) * DllRegisterServer (OLEAUT32.@)
*/ */
HRESULT WINAPI DllRegisterServer(void) HRESULT WINAPI DllRegisterServer(void)
{ {
@ -916,7 +916,7 @@ HRESULT WINAPI DllRegisterServer(void)
} }
/*********************************************************************** /***********************************************************************
* DllUnregisterServer (OLEAUT32.321) * DllUnregisterServer (OLEAUT32.@)
*/ */
HRESULT WINAPI DllUnregisterServer(void) HRESULT WINAPI DllUnregisterServer(void)
{ {

View file

@ -789,12 +789,12 @@ HRESULT WINAPI SafeArrayLock(SAFEARRAY *psa)
if (!psa) if (!psa)
return E_INVALIDARG; return E_INVALIDARG;
ulLocks = InterlockedIncrement(&psa->cLocks); ulLocks = InterlockedIncrement( (LONG*) &psa->cLocks);
if (ulLocks > 0xffff) /* Maximum of 16384 locks at a time */ if (ulLocks > 0xffff) /* Maximum of 16384 locks at a time */
{ {
WARN("Out of locks!\n"); WARN("Out of locks!\n");
InterlockedDecrement(&psa->cLocks); InterlockedDecrement( (LONG*) &psa->cLocks);
return E_UNEXPECTED; return E_UNEXPECTED;
} }
return S_OK; return S_OK;
@ -823,10 +823,10 @@ HRESULT WINAPI SafeArrayUnlock(SAFEARRAY *psa)
if (!psa) if (!psa)
return E_INVALIDARG; return E_INVALIDARG;
if ((LONG)InterlockedDecrement(&psa->cLocks) < 0) if ((LONG)InterlockedDecrement( (LONG*) &psa->cLocks) < 0)
{ {
WARN("Unlocked but no lock held!\n"); WARN("Unlocked but no lock held!\n");
InterlockedIncrement(&psa->cLocks); InterlockedIncrement( (LONG*) &psa->cLocks);
return E_UNEXPECTED; return E_UNEXPECTED;
} }
return S_OK; return S_OK;

View file

@ -159,7 +159,6 @@ _unmarshal_interface(marshal_state *buf, REFIID riid, LPUNKNOWN *pUnk) {
static HRESULT static HRESULT
_marshal_interface(marshal_state *buf, REFIID riid, LPUNKNOWN pUnk) { _marshal_interface(marshal_state *buf, REFIID riid, LPUNKNOWN pUnk) {
LPUNKNOWN newiface = NULL;
LPBYTE tempbuf = NULL; LPBYTE tempbuf = NULL;
IStream *pStm = NULL; IStream *pStm = NULL;
STATSTG ststg; STATSTG ststg;
@ -183,11 +182,6 @@ _marshal_interface(marshal_state *buf, REFIID riid, LPUNKNOWN pUnk) {
hres = E_FAIL; hres = E_FAIL;
TRACE("...%s...\n",debugstr_guid(riid)); TRACE("...%s...\n",debugstr_guid(riid));
hres = IUnknown_QueryInterface(pUnk,riid,(LPVOID*)&newiface);
if (hres) {
WARN("%p does not support iface %s\n",pUnk,debugstr_guid(riid));
goto fail;
}
hres = CreateStreamOnHGlobal(0,TRUE,&pStm); hres = CreateStreamOnHGlobal(0,TRUE,&pStm);
if (hres) { if (hres) {
@ -195,7 +189,7 @@ _marshal_interface(marshal_state *buf, REFIID riid, LPUNKNOWN pUnk) {
goto fail; goto fail;
} }
hres = CoMarshalInterface(pStm,riid,newiface,0,NULL,0); hres = CoMarshalInterface(pStm,riid,pUnk,0,NULL,0);
if (hres) { if (hres) {
ERR("Marshalling interface %s failed with %lx\n", debugstr_guid(riid), hres); ERR("Marshalling interface %s failed with %lx\n", debugstr_guid(riid), hres);
goto fail; goto fail;
@ -226,7 +220,6 @@ _marshal_interface(marshal_state *buf, REFIID riid, LPUNKNOWN pUnk) {
hres = xbuf_add(buf,tempbuf,ststg.cbSize.u.LowPart); hres = xbuf_add(buf,tempbuf,ststg.cbSize.u.LowPart);
HeapFree(GetProcessHeap(),0,tempbuf); HeapFree(GetProcessHeap(),0,tempbuf);
IUnknown_Release(newiface);
IStream_Release(pStm); IStream_Release(pStm);
return hres; return hres;
@ -235,7 +228,6 @@ fail:
xsize = 0; xsize = 0;
xbuf_add(buf,(LPBYTE)&xsize,sizeof(xsize)); xbuf_add(buf,(LPBYTE)&xsize,sizeof(xsize));
if (pStm) IUnknown_Release(pStm); if (pStm) IUnknown_Release(pStm);
if (newiface) IUnknown_Release(newiface);
HeapFree(GetProcessHeap(), 0, tempbuf); HeapFree(GetProcessHeap(), 0, tempbuf);
return hres; return hres;
} }
@ -556,7 +548,7 @@ serialize_param(
if (hres) return hres; if (hres) return hres;
} }
/* need to recurse since we need to free the stuff */ /* need to recurse since we need to free the stuff */
hres = serialize_param(tinfo,writeit,debugout,dealloc,&tdesc2,&(V_I4(vt)),buf); hres = serialize_param(tinfo,writeit,debugout,dealloc,&tdesc2,(DWORD*)&(V_I4(vt)),buf);
if (debugout) TRACE_(olerelay)(")"); if (debugout) TRACE_(olerelay)(")");
return hres; return hres;
} }
@ -663,6 +655,8 @@ serialize_param(
case TKIND_INTERFACE: case TKIND_INTERFACE:
if (writeit) if (writeit)
hres=_marshal_interface(buf,&(tattr->guid),(LPUNKNOWN)arg); hres=_marshal_interface(buf,&(tattr->guid),(LPUNKNOWN)arg);
if (dealloc)
IUnknown_Release((LPUNKNOWN)arg);
break; break;
case TKIND_RECORD: { case TKIND_RECORD: {
int i; int i;
@ -1077,7 +1071,7 @@ deserialize_param(
tdesc2.vt = vttype; tdesc2.vt = vttype;
V_VT(vt) = vttype; V_VT(vt) = vttype;
if (debugout) TRACE_(olerelay)("Vt(%ld)(",vttype); if (debugout) TRACE_(olerelay)("Vt(%ld)(",vttype);
hres = deserialize_param(tinfo, readit, debugout, alloc, &tdesc2, &(V_I4(vt)), buf); hres = deserialize_param(tinfo, readit, debugout, alloc, &tdesc2, (DWORD*)&(V_I4(vt)), buf);
TRACE_(olerelay)(")"); TRACE_(olerelay)(")");
return hres; return hres;
} else { } else {
@ -1526,7 +1520,7 @@ xCall(LPVOID retptr, int method, TMProxyImpl *tpinfo /*, args */)
ULONG status; ULONG status;
BSTR fname,iname; BSTR fname,iname;
BSTR names[10]; BSTR names[10];
int nrofnames; UINT nrofnames;
int is_idispatch_getidsofnames = 0; int is_idispatch_getidsofnames = 0;
DWORD remoteresult = 0; DWORD remoteresult = 0;
ITypeInfo *tinfo; ITypeInfo *tinfo;
@ -2016,7 +2010,7 @@ TMStubImpl_Invoke(
HRESULT hres; HRESULT hres;
DWORD *args, res, *xargs, nrofargs; DWORD *args, res, *xargs, nrofargs;
marshal_state buf; marshal_state buf;
int nrofnames; UINT nrofnames;
BSTR names[10]; BSTR names[10];
BSTR fname = NULL,iname = NULL; BSTR fname = NULL,iname = NULL;
BOOL is_idispatch_getidsofnames = 0; BOOL is_idispatch_getidsofnames = 0;
@ -2220,11 +2214,34 @@ afterserialize:
return hres; return hres;
ITypeInfo_Release(tinfo); ITypeInfo_Release(tinfo);
HeapFree(GetProcessHeap(), 0, args);
xmsg->cbBuffer = buf.curoff; xmsg->cbBuffer = buf.curoff;
I_RpcGetBuffer((RPC_MESSAGE *)xmsg); if (rpcchanbuf)
memcpy(xmsg->Buffer, buf.base, buf.curoff); {
HeapFree(GetProcessHeap(),0,args); hres = IRpcChannelBuffer_GetBuffer(rpcchanbuf, xmsg, &This->iid);
return S_OK; if (hres != S_OK)
ERR("IRpcChannelBuffer_GetBuffer failed with error 0x%08lx\n", hres);
}
else
{
/* FIXME: remove this case when we start sending an IRpcChannelBuffer
* object with builtin OLE */
RPC_STATUS status = I_RpcGetBuffer((RPC_MESSAGE *)xmsg);
if (status != RPC_S_OK)
{
ERR("I_RpcGetBuffer failed with error %ld\n", status);
hres = E_FAIL;
}
}
if (hres == S_OK)
memcpy(xmsg->Buffer, buf.base, buf.curoff);
HeapFree(GetProcessHeap(), 0, buf.base);
TRACE("returning\n");
return hres;
} }
static LPRPCSTUBBUFFER WINAPI static LPRPCSTUBBUFFER WINAPI
@ -2237,6 +2254,7 @@ static ULONG WINAPI
TMStubImpl_CountRefs(LPRPCSTUBBUFFER iface) { TMStubImpl_CountRefs(LPRPCSTUBBUFFER iface) {
TMStubImpl *This = (TMStubImpl *)iface; TMStubImpl *This = (TMStubImpl *)iface;
FIXME("()\n");
return This->ref; /*FIXME? */ return This->ref; /*FIXME? */
} }
@ -2305,10 +2323,9 @@ static const IPSFactoryBufferVtbl psfacbufvtbl = {
static const IPSFactoryBufferVtbl *lppsfac = &psfacbufvtbl; static const IPSFactoryBufferVtbl *lppsfac = &psfacbufvtbl;
/*********************************************************************** /***********************************************************************
* DllGetClassObject [OLE32.63] * TMARSHAL_DllGetClassObject
*/ */
HRESULT WINAPI HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv)
TypeLibFac_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv)
{ {
if (IsEqualIID(iid,&IID_IPSFactoryBuffer)) { if (IsEqualIID(iid,&IID_IPSFactoryBuffer)) {
*ppv = &lppsfac; *ppv = &lppsfac;

View file

@ -247,7 +247,7 @@ HRESULT WINAPI QueryPathOfRegTypeLib(
while (hr != S_OK) while (hr != S_OK)
{ {
DWORD dwPathLen = sizeof(Path); LONG dwPathLen = sizeof(Path);
get_lcid_subkey( myLCID, SYS_WIN32, buffer ); get_lcid_subkey( myLCID, SYS_WIN32, buffer );
@ -885,8 +885,10 @@ typedef struct tagITypeLibImpl
static const ITypeLib2Vtbl tlbvt; static const ITypeLib2Vtbl tlbvt;
static const ITypeCompVtbl tlbtcvt; static const ITypeCompVtbl tlbtcvt;
#define _ITypeComp_Offset(impl) ((int)(&(((impl*)0)->lpVtblTypeComp))) static inline ITypeLibImpl *impl_from_ITypeComp( ITypeComp *iface )
#define ICOM_THIS_From_ITypeComp(impl, iface) impl* This = (impl*)(((char*)iface)-_ITypeComp_Offset(impl)) {
return (ITypeLibImpl *)((char*)iface - FIELD_OFFSET(ITypeLibImpl, lpVtblTypeComp));
}
/* ITypeLib methods */ /* ITypeLib methods */
static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength); static ITypeLib2* ITypeLib2_Constructor_MSFT(LPVOID pLib, DWORD dwTLBLength);
@ -995,6 +997,11 @@ typedef struct tagITypeInfoImpl
struct tagITypeInfoImpl * next; struct tagITypeInfoImpl * next;
} ITypeInfoImpl; } ITypeInfoImpl;
static inline ITypeInfoImpl *info_impl_from_ITypeComp( ITypeComp *iface )
{
return (ITypeInfoImpl *)((char*)iface - FIELD_OFFSET(ITypeInfoImpl, lpVtblTypeComp));
}
static const ITypeInfo2Vtbl tinfvt; static const ITypeInfo2Vtbl tinfvt;
static const ITypeCompVtbl tcompvt; static const ITypeCompVtbl tcompvt;
@ -2909,7 +2916,7 @@ static SLTG_TypeInfoTail *SLTG_ProcessInterface(char *pBlk, ITypeInfoImpl *pTI,
paramName = NULL; paramName = NULL;
HaveOffs = TRUE; HaveOffs = TRUE;
} }
else if(!isalnum(*(paramName-1))) else if(paramName[-1] && !isalnum(paramName[-1]))
HaveOffs = TRUE; HaveOffs = TRUE;
pArg++; pArg++;
@ -3125,7 +3132,7 @@ static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength)
DWORD len, order; DWORD len, order;
ITypeInfoImpl **ppTypeInfoImpl; ITypeInfoImpl **ppTypeInfoImpl;
TRACE("%p, TLB length = %ld\n", pLib, dwTLBLength); TRACE_(typelib)("%p, TLB length = %ld\n", pLib, dwTLBLength);
pTypeLibImpl = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ITypeLibImpl)); pTypeLibImpl = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ITypeLibImpl));
if (!pTypeLibImpl) return NULL; if (!pTypeLibImpl) return NULL;
@ -3135,8 +3142,8 @@ static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength)
pHeader = pLib; pHeader = pLib;
TRACE("header:\n"); TRACE_(typelib)("header:\n");
TRACE("\tmagic=0x%08lx, file blocks = %d\n", pHeader->SLTG_magic, TRACE_(typelib)("\tmagic=0x%08lx, file blocks = %d\n", pHeader->SLTG_magic,
pHeader->nrOfFileBlks ); pHeader->nrOfFileBlks );
if (pHeader->SLTG_magic != SLTG_SIGNATURE) { if (pHeader->SLTG_magic != SLTG_SIGNATURE) {
FIXME("Header type magic 0x%08lx not supported.\n", FIXME("Header type magic 0x%08lx not supported.\n",
@ -3212,7 +3219,7 @@ static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength)
} }
w = *(WORD*)(ptr + 4 + len); w = *(WORD*)(ptr + 4 + len);
if(w != 0xffff) { if(w != 0xffff) {
TRACE("\twith %s\n", debugstr_an(ptr + 6 + len, w)); TRACE_(typelib)("\twith %s\n", debugstr_an(ptr + 6 + len, w));
len += w; len += w;
pOtherTypeInfoBlks[i].other_name = HeapAlloc(GetProcessHeap(),0, pOtherTypeInfoBlks[i].other_name = HeapAlloc(GetProcessHeap(),0,
w+1); w+1);
@ -3359,7 +3366,7 @@ static ITypeLib2* ITypeLib2_Constructor_SLTG(LPVOID pLib, DWORD dwTLBLength)
(*ppTypeInfoImpl)->TypeAttr.cbSizeInstance = pTITail->cbSizeInstance; (*ppTypeInfoImpl)->TypeAttr.cbSizeInstance = pTITail->cbSizeInstance;
(*ppTypeInfoImpl)->TypeAttr.cbSizeVft = pTITail->cbSizeVft; (*ppTypeInfoImpl)->TypeAttr.cbSizeVft = pTITail->cbSizeVft;
#define X(x) TRACE("tt "#x": %x\n",pTITail->res##x); #define X(x) TRACE_(typelib)("tt "#x": %x\n",pTITail->res##x);
X(06); X(06);
X(08); X(08);
X(0a); X(0a);
@ -4003,23 +4010,23 @@ static const ITypeLib2Vtbl tlbvt = {
static HRESULT WINAPI ITypeLibComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv) static HRESULT WINAPI ITypeLibComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv)
{ {
ICOM_THIS_From_ITypeComp(ITypeLibImpl, iface); ITypeLibImpl *This = impl_from_ITypeComp(iface);
return ITypeInfo_QueryInterface((ITypeInfo *)This, riid, ppv); return ITypeLib2_QueryInterface((ITypeLib *)This, riid, ppv);
} }
static ULONG WINAPI ITypeLibComp_fnAddRef(ITypeComp * iface) static ULONG WINAPI ITypeLibComp_fnAddRef(ITypeComp * iface)
{ {
ICOM_THIS_From_ITypeComp(ITypeLibImpl, iface); ITypeLibImpl *This = impl_from_ITypeComp(iface);
return ITypeInfo_AddRef((ITypeInfo *)This); return ITypeLib2_AddRef((ITypeLib2 *)This);
} }
static ULONG WINAPI ITypeLibComp_fnRelease(ITypeComp * iface) static ULONG WINAPI ITypeLibComp_fnRelease(ITypeComp * iface)
{ {
ICOM_THIS_From_ITypeComp(ITypeLibImpl, iface); ITypeLibImpl *This = impl_from_ITypeComp(iface);
return ITypeInfo_Release((ITypeInfo *)This); return ITypeLib2_Release((ITypeLib2 *)This);
} }
static HRESULT WINAPI ITypeLibComp_fnBind( static HRESULT WINAPI ITypeLibComp_fnBind(
@ -4169,7 +4176,7 @@ static HRESULT WINAPI ITypeInfo_fnGetTypeAttr( ITypeInfo2 *iface,
if(This->TypeAttr.typekind == TKIND_ALIAS) /* need to deep copy typedesc */ if(This->TypeAttr.typekind == TKIND_ALIAS) /* need to deep copy typedesc */
copy_typedesc(&(*ppTypeAttr)->tdescAlias, &This->TypeAttr.tdescAlias); copy_typedesc(&(*ppTypeAttr)->tdescAlias, &This->TypeAttr.tdescAlias);
if((*ppTypeAttr)->typekind == TKIND_DISPATCH && (*ppTypeAttr)->wTypeFlags & TYPEFLAG_FDUAL) { if((*ppTypeAttr)->typekind == TKIND_DISPATCH) {
(*ppTypeAttr)->cFuncs = (*ppTypeAttr)->cbSizeVft / 4; /* This should include all the inherited (*ppTypeAttr)->cFuncs = (*ppTypeAttr)->cbSizeVft / 4; /* This should include all the inherited
funcs */ funcs */
(*ppTypeAttr)->cbSizeVft = 28; /* This is always the size of IDispatch's vtbl */ (*ppTypeAttr)->cbSizeVft = 28; /* This is always the size of IDispatch's vtbl */
@ -4990,6 +4997,14 @@ static HRESULT WINAPI ITypeInfo_fnInvoke(
dump_Variant(&varresult); dump_Variant(&varresult);
} }
hres = VariantCopyInd(pVarResult, &varresult); hres = VariantCopyInd(pVarResult, &varresult);
/* free data stored in varresult. Note that
* VariantClear doesn't do what we want because we are
* working with byref types. */
/* FIXME: clear safearrays, bstrs, records and
* variants here too */
if ((V_VT(&varresult) == (VT_UNKNOWN | VT_BYREF)) ||
(V_VT(&varresult) == (VT_DISPATCH | VT_BYREF)))
IUnknown_Release(*V_UNKNOWNREF(&varresult));
break; break;
} }
} }
@ -5113,6 +5128,7 @@ static HRESULT WINAPI ITypeInfo_fnGetDocumentation( ITypeInfo2 *iface,
return S_OK; return S_OK;
} }
} }
WARN("member %ld not found\n", memid);
return TYPE_E_ELEMENTNOTFOUND; return TYPE_E_ELEMENTNOTFOUND;
} }
@ -5207,7 +5223,7 @@ static HRESULT WINAPI ITypeInfo_fnGetRefTypeInfo(
ITypeLib *pTLib = NULL; ITypeLib *pTLib = NULL;
if(pRefType->pImpTLInfo == TLB_REF_INTERNAL) { if(pRefType->pImpTLInfo == TLB_REF_INTERNAL) {
int Index; UINT Index;
result = ITypeInfo_GetContainingTypeLib(iface, &pTLib, &Index); result = ITypeInfo_GetContainingTypeLib(iface, &pTLib, &Index);
} else { } else {
if(pRefType->pImpTLInfo->pImpTypeLib) { if(pRefType->pImpTLInfo->pImpTypeLib) {
@ -5955,21 +5971,21 @@ HRESULT WINAPI CreateDispTypeInfo(
static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv) static HRESULT WINAPI ITypeComp_fnQueryInterface(ITypeComp * iface, REFIID riid, LPVOID * ppv)
{ {
ICOM_THIS_From_ITypeComp(ITypeInfoImpl, iface); ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
return ITypeInfo_QueryInterface((ITypeInfo *)This, riid, ppv); return ITypeInfo_QueryInterface((ITypeInfo *)This, riid, ppv);
} }
static ULONG WINAPI ITypeComp_fnAddRef(ITypeComp * iface) static ULONG WINAPI ITypeComp_fnAddRef(ITypeComp * iface)
{ {
ICOM_THIS_From_ITypeComp(ITypeInfoImpl, iface); ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
return ITypeInfo_AddRef((ITypeInfo *)This); return ITypeInfo_AddRef((ITypeInfo *)This);
} }
static ULONG WINAPI ITypeComp_fnRelease(ITypeComp * iface) static ULONG WINAPI ITypeComp_fnRelease(ITypeComp * iface)
{ {
ICOM_THIS_From_ITypeComp(ITypeInfoImpl, iface); ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
return ITypeInfo_Release((ITypeInfo *)This); return ITypeInfo_Release((ITypeInfo *)This);
} }
@ -5983,7 +5999,7 @@ static HRESULT WINAPI ITypeComp_fnBind(
DESCKIND * pDescKind, DESCKIND * pDescKind,
BINDPTR * pBindPtr) BINDPTR * pBindPtr)
{ {
ICOM_THIS_From_ITypeComp(ITypeInfoImpl, iface); ITypeInfoImpl *This = info_impl_from_ITypeComp(iface);
TLBFuncDesc * pFDesc; TLBFuncDesc * pFDesc;
TLBVarDesc * pVDesc; TLBVarDesc * pVDesc;

View file

@ -597,9 +597,12 @@ WORD offset from start of block to SAFEARRAY
WORD typeofarray WORD typeofarray
*/ */
#include "poppack.h"
extern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args); extern DWORD _invoke(FARPROC func,CALLCONV callconv, int nrargs, DWORD *args);
extern void dump_Variant(VARIANT * pvar); extern void dump_Variant(VARIANT * pvar);
#include "poppack.h"
HRESULT TMARSHAL_DllGetClassObject(REFCLSID rclsid, REFIID iid,LPVOID *ppv);
/*---------------------------END--------------------------------------------*/ /*---------------------------END--------------------------------------------*/
#endif #endif

View file

@ -1,12 +1,12 @@
2 stub CREATETYPELIB 2 stub CREATETYPELIB
3 pascal LoadTypeLib(ptr ptr) LoadTypeLib16 3 pascal LoadTypeLib(ptr ptr) LoadTypeLib16
4 stub LHASHVALOFNAMESYS 4 stub LHASHVALOFNAMESYS
5 stub _IID_ICREATETYPEINFO 5 stub _IID_ICREATETYPEINFO
6 stub _IID_ICREATETYPELIB 6 stub _IID_ICREATETYPELIB
7 stub _IID_ITYPECOMP 7 stub _IID_ITYPECOMP
8 stub _IID_ITYPEINFO 8 stub _IID_ITYPEINFO
9 stub _IID_ITYPELIB 9 stub _IID_ITYPELIB
10 stub REGISTERTYPELIB 10 stub REGISTERTYPELIB
11 stub LOADREGTYPELIB 11 stub LOADREGTYPELIB
14 pascal QueryPathOfRegTypeLib(ptr word word word ptr) QueryPathOfRegTypeLib16 14 pascal QueryPathOfRegTypeLib(ptr word word word ptr) QueryPathOfRegTypeLib16
15 pascal OaBuildVersion() OaBuildVersion16 15 pascal OaBuildVersion() OaBuildVersion16

View file

@ -166,8 +166,10 @@ typedef struct tagICreateTypeLib2Impl
struct tagICreateTypeInfo2Impl *last_typeinfo; struct tagICreateTypeInfo2Impl *last_typeinfo;
} ICreateTypeLib2Impl; } ICreateTypeLib2Impl;
#define _ITypeLib2_Offset(impl) ((int)(&(((impl*)0)->lpVtblTypeLib2))) static inline ICreateTypeLib2Impl *impl_from_ITypeLib2( ITypeLib2 *iface )
#define ICOM_THIS_From_ITypeLib2(impl, iface) impl* This = (impl*)(((char*)iface)-_ITypeLib2_Offset(impl)) {
return (ICreateTypeLib2Impl *)((char*)iface - FIELD_OFFSET(ICreateTypeLib2Impl, lpVtblTypeLib2));
}
typedef struct tagICreateTypeInfo2Impl typedef struct tagICreateTypeInfo2Impl
{ {
@ -192,8 +194,10 @@ typedef struct tagICreateTypeInfo2Impl
struct tagICreateTypeInfo2Impl *next_typeinfo; struct tagICreateTypeInfo2Impl *next_typeinfo;
} ICreateTypeInfo2Impl; } ICreateTypeInfo2Impl;
#define _ITypeInfo2_Offset(impl) ((int)(&(((impl*)0)->lpVtblTypeInfo2))) static inline ICreateTypeInfo2Impl *impl_from_ITypeInfo2( ITypeInfo2 *iface )
#define ICOM_THIS_From_ITypeInfo2(impl, iface) impl* This = (impl*)(((char*)iface)-_ITypeInfo2_Offset(impl)) {
return (ICreateTypeInfo2Impl *)((char*)iface - FIELD_OFFSET(ICreateTypeInfo2Impl, lpVtblTypeInfo2));
}
static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface); static ULONG WINAPI ICreateTypeLib2_fnRelease(ICreateTypeLib2 *iface);
@ -1328,7 +1332,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnAddRefTypeInfo(
ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface; ICreateTypeInfo2Impl *This = (ICreateTypeInfo2Impl *)iface;
ITypeLib *container; ITypeLib *container;
int index; UINT index;
HRESULT res; HRESULT res;
TRACE("(%p,%p,%p)\n", iface, pTInfo, phRefType); TRACE("(%p,%p,%p)\n", iface, pTInfo, phRefType);
@ -2198,7 +2202,7 @@ static HRESULT WINAPI ICreateTypeInfo2_fnSetName(
*/ */
static HRESULT WINAPI ITypeInfo2_fnQueryInterface(ITypeInfo2 * iface, REFIID riid, LPVOID * ppv) static HRESULT WINAPI ITypeInfo2_fnQueryInterface(ITypeInfo2 * iface, REFIID riid, LPVOID * ppv)
{ {
ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface); ICreateTypeInfo2Impl *This = impl_from_ITypeInfo2(iface);
return ICreateTypeInfo2_QueryInterface((ICreateTypeInfo2 *)This, riid, ppv); return ICreateTypeInfo2_QueryInterface((ICreateTypeInfo2 *)This, riid, ppv);
} }
@ -2210,7 +2214,7 @@ static HRESULT WINAPI ITypeInfo2_fnQueryInterface(ITypeInfo2 * iface, REFIID rii
*/ */
static ULONG WINAPI ITypeInfo2_fnAddRef(ITypeInfo2 * iface) static ULONG WINAPI ITypeInfo2_fnAddRef(ITypeInfo2 * iface)
{ {
ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface); ICreateTypeInfo2Impl *This = impl_from_ITypeInfo2(iface);
return ICreateTypeInfo2_AddRef((ICreateTypeInfo2 *)This); return ICreateTypeInfo2_AddRef((ICreateTypeInfo2 *)This);
} }
@ -2222,7 +2226,7 @@ static ULONG WINAPI ITypeInfo2_fnAddRef(ITypeInfo2 * iface)
*/ */
static ULONG WINAPI ITypeInfo2_fnRelease(ITypeInfo2 * iface) static ULONG WINAPI ITypeInfo2_fnRelease(ITypeInfo2 * iface)
{ {
ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface); ICreateTypeInfo2Impl *This = impl_from_ITypeInfo2(iface);
return ICreateTypeInfo2_Release((ICreateTypeInfo2 *)This); return ICreateTypeInfo2_Release((ICreateTypeInfo2 *)This);
} }
@ -2461,7 +2465,7 @@ static HRESULT WINAPI ITypeInfo2_fnGetContainingTypeLib(
ITypeLib** ppTLib, ITypeLib** ppTLib,
UINT* pIndex) UINT* pIndex)
{ {
ICOM_THIS_From_ITypeInfo2(ICreateTypeInfo2Impl, iface); ICreateTypeInfo2Impl *This = impl_from_ITypeInfo2(iface);
TRACE("(%p,%p,%p)\n", iface, ppTLib, pIndex); TRACE("(%p,%p,%p)\n", iface, ppTLib, pIndex);
@ -3431,7 +3435,7 @@ static HRESULT WINAPI ICreateTypeLib2_fnSetHelpStringDll(
*/ */
static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 * iface, REFIID riid, LPVOID * ppv) static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 * iface, REFIID riid, LPVOID * ppv)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
return ICreateTypeLib2_QueryInterface((ICreateTypeLib2 *)This, riid, ppv); return ICreateTypeLib2_QueryInterface((ICreateTypeLib2 *)This, riid, ppv);
} }
@ -3443,7 +3447,7 @@ static HRESULT WINAPI ITypeLib2_fnQueryInterface(ITypeLib2 * iface, REFIID riid,
*/ */
static ULONG WINAPI ITypeLib2_fnAddRef(ITypeLib2 * iface) static ULONG WINAPI ITypeLib2_fnAddRef(ITypeLib2 * iface)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
return ICreateTypeLib2_AddRef((ICreateTypeLib2 *)This); return ICreateTypeLib2_AddRef((ICreateTypeLib2 *)This);
} }
@ -3455,7 +3459,7 @@ static ULONG WINAPI ITypeLib2_fnAddRef(ITypeLib2 * iface)
*/ */
static ULONG WINAPI ITypeLib2_fnRelease(ITypeLib2 * iface) static ULONG WINAPI ITypeLib2_fnRelease(ITypeLib2 * iface)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
return ICreateTypeLib2_Release((ICreateTypeLib2 *)This); return ICreateTypeLib2_Release((ICreateTypeLib2 *)This);
} }
@ -3468,7 +3472,7 @@ static ULONG WINAPI ITypeLib2_fnRelease(ITypeLib2 * iface)
static UINT WINAPI ITypeLib2_fnGetTypeInfoCount( static UINT WINAPI ITypeLib2_fnGetTypeInfoCount(
ITypeLib2 * iface) ITypeLib2 * iface)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
TRACE("(%p)\n", iface); TRACE("(%p)\n", iface);
@ -3485,7 +3489,7 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfo(
UINT index, UINT index,
ITypeInfo** ppTInfo) ITypeInfo** ppTInfo)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
TRACE("(%p,%d,%p)\n", iface, index, ppTInfo); TRACE("(%p,%d,%p)\n", iface, index, ppTInfo);
@ -3506,7 +3510,7 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoType(
UINT index, UINT index,
TYPEKIND* pTKind) TYPEKIND* pTKind)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
TRACE("(%p,%d,%p)\n", iface, index, pTKind); TRACE("(%p,%d,%p)\n", iface, index, pTKind);
@ -3529,7 +3533,7 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeInfoOfGuid(
REFGUID guid, REFGUID guid,
ITypeInfo** ppTinfo) ITypeInfo** ppTinfo)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
int guidoffset; int guidoffset;
int typeinfo; int typeinfo;
@ -3554,9 +3558,9 @@ static HRESULT WINAPI ITypeLib2_fnGetLibAttr(
ITypeLib2 * iface, ITypeLib2 * iface,
TLIBATTR** ppTLibAttr) TLIBATTR** ppTLibAttr)
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%p), stub!\n", iface, ppTLibAttr); FIXME("(%p,%p), stub!\n", This, ppTLibAttr);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3570,9 +3574,9 @@ static HRESULT WINAPI ITypeLib2_fnGetTypeComp(
ITypeLib2 * iface, ITypeLib2 * iface,
ITypeComp** ppTComp) ITypeComp** ppTComp)
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%p), stub!\n", iface, ppTComp); FIXME("(%p,%p), stub!\n", This, ppTComp);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3590,9 +3594,9 @@ static HRESULT WINAPI ITypeLib2_fnGetDocumentation(
DWORD* pdwHelpContext, DWORD* pdwHelpContext,
BSTR* pBstrHelpFile) BSTR* pBstrHelpFile)
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%d,%p,%p,%p,%p), stub!\n", iface, index, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile); FIXME("(%p,%d,%p,%p,%p,%p), stub!\n", This, index, pBstrName, pBstrDocString, pdwHelpContext, pBstrHelpFile);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3608,7 +3612,7 @@ static HRESULT WINAPI ITypeLib2_fnIsName(
ULONG lHashVal, ULONG lHashVal,
BOOL* pfName) BOOL* pfName)
{ {
ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
char *encoded_name; char *encoded_name;
int nameoffset; int nameoffset;
@ -3646,9 +3650,9 @@ static HRESULT WINAPI ITypeLib2_fnFindName(
MEMBERID* rgMemId, MEMBERID* rgMemId,
USHORT* pcFound) USHORT* pcFound)
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%s,%lx,%p,%p,%p), stub!\n", iface, debugstr_w(szNameBuf), lHashVal, ppTInfo, rgMemId, pcFound); FIXME("(%p,%s,%lx,%p,%p,%p), stub!\n", This, debugstr_w(szNameBuf), lHashVal, ppTInfo, rgMemId, pcFound);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3662,9 +3666,9 @@ static void WINAPI ITypeLib2_fnReleaseTLibAttr(
ITypeLib2 * iface, ITypeLib2 * iface,
TLIBATTR* pTLibAttr) TLIBATTR* pTLibAttr)
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%p), stub!\n", iface, pTLibAttr); FIXME("(%p,%p), stub!\n", This, pTLibAttr);
} }
/****************************************************************************** /******************************************************************************
@ -3682,9 +3686,9 @@ static HRESULT WINAPI ITypeLib2_fnGetCustData(
REFGUID guid, /* [I] The GUID under which the custom data is stored. */ REFGUID guid, /* [I] The GUID under which the custom data is stored. */
VARIANT* pVarVal) /* [O] The custom data. */ VARIANT* pVarVal) /* [O] The custom data. */
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%s,%p), stub!\n", iface, debugstr_guid(guid), pVarVal); FIXME("(%p,%s,%p), stub!\n", This, debugstr_guid(guid), pVarVal);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3705,9 +3709,9 @@ static HRESULT WINAPI ITypeLib2_fnGetLibStatistics(
ULONG* pcUniqueNames, /* [O] The number of unique names in the type library. */ ULONG* pcUniqueNames, /* [O] The number of unique names in the type library. */
ULONG* pcchUniqueNames) /* [O] The number of changed (?) characters in names in the type library. */ ULONG* pcchUniqueNames) /* [O] The number of changed (?) characters in names in the type library. */
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%p,%p), stub!\n", iface, pcUniqueNames, pcchUniqueNames); FIXME("(%p,%p,%p), stub!\n", This, pcUniqueNames, pcchUniqueNames);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3730,9 +3734,9 @@ static HRESULT WINAPI ITypeLib2_fnGetDocumentation2(
DWORD* pdwHelpStringContext, DWORD* pdwHelpStringContext,
BSTR* pbstrHelpStringDll) BSTR* pbstrHelpStringDll)
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%d,%ld,%p,%p,%p), stub!\n", iface, index, lcid, pbstrHelpString, pdwHelpStringContext, pbstrHelpStringDll); FIXME("(%p,%d,%ld,%p,%p,%p), stub!\n", This, index, lcid, pbstrHelpString, pdwHelpStringContext, pbstrHelpStringDll);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }
@ -3751,9 +3755,9 @@ static HRESULT WINAPI ITypeLib2_fnGetAllCustData(
ITypeLib2 * iface, /* [I] The type library in which to find the custom data. */ ITypeLib2 * iface, /* [I] The type library in which to find the custom data. */
CUSTDATA* pCustData) /* [O] The structure in which to place the custom data. */ CUSTDATA* pCustData) /* [O] The structure in which to place the custom data. */
{ {
/* ICOM_THIS_From_ITypeLib2(ICreateTypeLib2Impl, iface); */ ICreateTypeLib2Impl *This = impl_from_ITypeLib2(iface);
FIXME("(%p,%p), stub!\n", iface, pCustData); FIXME("(%p,%p), stub!\n", This, pCustData);
return E_OUTOFMEMORY; return E_OUTOFMEMORY;
} }

View file

@ -1342,7 +1342,7 @@ static HRESULT VARIANT_FormatNumber(LPVARIANT pVarIn, LPOLESTR lpszFormat,
case FMT_GEN_INLINE: case FMT_GEN_INLINE:
pToken += 2; pToken += 2;
TRACE("copy %s\n", debugstr_a(pToken)); TRACE("copy %s\n", debugstr_a((LPCSTR)pToken));
while (*pToken) while (*pToken)
*pBuff++ = *pToken++; *pBuff++ = *pToken++;
break; break;

View file

@ -1926,6 +1926,11 @@ HRESULT WINAPI VarParseNumFromStr(OLECHAR *lpszStr, LCID lcid, ULONG dwFlags,
* - Rounding (dropping of decimal points) occurs without error. See VarI8FromR8() * - Rounding (dropping of decimal points) occurs without error. See VarI8FromR8()
* for details of the rounding method. * for details of the rounding method.
* - pVarDst is not cleared before the result is stored in it. * - pVarDst is not cleared before the result is stored in it.
* - WinXP and Win2003 support VTBIT_I8, VTBIT_UI8 but that's buggy (by
* design?): If some other VTBIT's for integers are specified together
* with VTBIT_I8 and the number will fit only in a VT_I8 Windows will "cast"
* the number to the smallest requested integer truncating this way the
* number. Wine dosn't implement this "feature" (yet?).
*/ */
HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig, HRESULT WINAPI VarNumFromParseNum(NUMPARSE *pNumprs, BYTE *rgbDig,
ULONG dwVtBits, VARIANT *pVarDst) ULONG dwVtBits, VARIANT *pVarDst)
@ -2893,8 +2898,12 @@ HRESULT WINAPI VarAdd(LPVARIANT left, LPVARIANT right, LPVARIANT result)
} }
if (resvt != tvt) { if (resvt != tvt) {
if ((hres = VariantChangeType(result, &tv, 0, resvt)) != S_OK) { if ((hres = VariantChangeType(result, &tv, 0, resvt)) != S_OK) {
/* Overflow! Change to the vartype with the next higher priority */ /* Overflow! Change to the vartype with the next higher priority.
resvt = prio2vt[coerce[resvt] + 1]; With one exception: I4 ==> R8 even if it would fit in I8 */
if (resvt == VT_I4)
resvt = VT_R8;
else
resvt = prio2vt[coerce[resvt] + 1];
hres = VariantChangeType(result, &tv, 0, resvt); hres = VariantChangeType(result, &tv, 0, resvt);
} }
} else } else
@ -3061,8 +3070,12 @@ HRESULT WINAPI VarMul(LPVARIANT left, LPVARIANT right, LPVARIANT result)
} }
if (resvt != tvt) { if (resvt != tvt) {
while ((hres = VariantChangeType(result, &tv, 0, resvt)) != S_OK) { while ((hres = VariantChangeType(result, &tv, 0, resvt)) != S_OK) {
/* Overflow! Change to the vartype with the next higher priority */ /* Overflow! Change to the vartype with the next higher priority.
resvt = prio2vt[coerce[resvt] + 1]; With one exception: I4 ==> R8 even if it would fit in I8 */
if (resvt == VT_I4)
resvt = VT_R8;
else
resvt = prio2vt[coerce[resvt] + 1];
} }
} else } else
hres = VariantCopy(result, &tv); hres = VariantCopy(result, &tv);

View file

@ -92,333 +92,11 @@ extern const char* wine_vflags[];
#define DEC_MAX_SCALE 28 /* Maximum scale for a decimal */ #define DEC_MAX_SCALE 28 /* Maximum scale for a decimal */
/* Inline return type */
#define RETTYP inline static HRESULT
/* Simple compiler cast from one type to another */
#define SIMPLE(dest, src, func) RETTYP _##func(src in, dest* out) { \
*out = in; return S_OK; }
/* Compiler cast where input cannot be negative */
#define NEGTST(dest, src, func) RETTYP _##func(src in, dest* out) { \
if (in < (src)0) return DISP_E_OVERFLOW; *out = in; return S_OK; }
/* Compiler cast where input cannot be > some number */
#define POSTST(dest, src, func, tst) RETTYP _##func(src in, dest* out) { \
if (in > (dest)tst) return DISP_E_OVERFLOW; *out = in; return S_OK; }
/* Compiler cast where input cannot be < some number or >= some other number */
#define BOTHTST(dest, src, func, lo, hi) RETTYP _##func(src in, dest* out) { \
if (in < (dest)lo || in > hi) return DISP_E_OVERFLOW; *out = in; return S_OK; }
/* Conversions from IDispatch use the same code */
HRESULT VARIANT_FromDisp(IDispatch*,LCID,void*,VARTYPE);
/* As do conversions from BSTR to numeric types */
HRESULT VARIANT_NumberFromBstr(OLECHAR*,LCID,ULONG,void*,VARTYPE);
#define CY_MULTIPLIER 10000 /* 4 dp of precision */
#define CY_MULTIPLIER_F 10000.0
#define CY_HALF (CY_MULTIPLIER/2) /* 0.5 */
#define CY_HALF_F (CY_MULTIPLIER_F/2.0)
/* I1 */
POSTST(signed char, BYTE, VarI1FromUI1, I1_MAX);
BOTHTST(signed char, SHORT, VarI1FromI2, I1_MIN, I1_MAX);
BOTHTST(signed char, LONG, VarI1FromI4, I1_MIN, I1_MAX);
#define _VarI1FromR4(flt,out) VarI1FromR8((double)flt,out)
#define _VarI1FromR8 VarI1FromR8
#define _VarI1FromCy VarI1FromCy
#define _VarI1FromDate(dt,out) VarI1FromR8((double)dt,out)
#define _VarI1FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_I1)
#define _VarI1FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, (BYTE*)out, VT_I1)
SIMPLE(signed char, VARIANT_BOOL, VarI1FromBool);
POSTST(signed char, USHORT, VarI1FromUI2, I1_MAX);
POSTST(signed char, ULONG, VarI1FromUI4, I1_MAX);
#define _VarI1FromDec VarI1FromDec
BOTHTST(signed char, LONG64, VarI1FromI8, I1_MIN, I1_MAX);
POSTST(signed char, ULONG64, VarI1FromUI8, I1_MAX);
/* UI1 */
BOTHTST(BYTE, SHORT, VarUI1FromI2, UI1_MIN, UI1_MAX);
#define _VarUI1FromR4(flt,out) VarUI1FromR8((double)flt,out)
#define _VarUI1FromR8 VarUI1FromR8
#define _VarUI1FromCy VarUI1FromCy
#define _VarUI1FromDate(dt,out) VarUI1FromR8((double)dt,out)
#define _VarUI1FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_UI1)
#define _VarUI1FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_UI1)
SIMPLE(BYTE, VARIANT_BOOL, VarUI1FromBool);
NEGTST(BYTE, signed char, VarUI1FromI1);
POSTST(BYTE, USHORT, VarUI1FromUI2, UI1_MAX);
BOTHTST(BYTE, LONG, VarUI1FromI4, UI1_MIN, UI1_MAX);
POSTST(BYTE, ULONG, VarUI1FromUI4, UI1_MAX);
#define _VarUI1FromDec VarUI1FromDec
BOTHTST(BYTE, LONG64, VarUI1FromI8, UI1_MIN, UI1_MAX);
POSTST(BYTE, ULONG64, VarUI1FromUI8, UI1_MAX);
/* I2 */
SIMPLE(SHORT, BYTE, VarI2FromUI1);
BOTHTST(SHORT, LONG, VarI2FromI4, I2_MIN, I2_MAX);
#define _VarI2FromR4(flt,out) VarI2FromR8((double)flt,out)
#define _VarI2FromR8 VarI2FromR8
#define _VarI2FromCy VarI2FromCy
#define _VarI2FromDate(dt,out) VarI2FromR8((double)dt,out)
#define _VarI2FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_I2)
#define _VarI2FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, (BYTE*)out, VT_I2)
SIMPLE(SHORT, VARIANT_BOOL, VarI2FromBool);
SIMPLE(SHORT, signed char, VarI2FromI1);
POSTST(SHORT, USHORT, VarI2FromUI2, I2_MAX);
POSTST(SHORT, ULONG, VarI2FromUI4, I2_MAX);
#define _VarI2FromDec VarI2FromDec
BOTHTST(SHORT, LONG64, VarI2FromI8, I2_MIN, I2_MAX);
POSTST(SHORT, ULONG64, VarI2FromUI8, I2_MAX);
/* UI2 */
SIMPLE(USHORT, BYTE, VarUI2FromUI1);
NEGTST(USHORT, SHORT, VarUI2FromI2);
BOTHTST(USHORT, LONG, VarUI2FromI4, UI2_MIN, UI2_MAX);
#define _VarUI2FromR4(flt,out) VarUI2FromR8((double)flt,out)
#define _VarUI2FromR8 VarUI2FromR8
#define _VarUI2FromCy VarUI2FromCy
#define _VarUI2FromDate(dt,out) VarUI2FromR8((double)dt,out)
#define _VarUI2FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_UI2)
#define _VarUI2FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_UI2)
SIMPLE(USHORT, VARIANT_BOOL, VarUI2FromBool);
NEGTST(USHORT, signed char, VarUI2FromI1);
POSTST(USHORT, ULONG, VarUI2FromUI4, UI2_MAX);
#define _VarUI2FromDec VarUI2FromDec
BOTHTST(USHORT, LONG64, VarUI2FromI8, UI2_MIN, UI2_MAX);
POSTST(USHORT, ULONG64, VarUI2FromUI8, UI2_MAX);
/* I4 */
SIMPLE(LONG, BYTE, VarI4FromUI1);
SIMPLE(LONG, SHORT, VarI4FromI2);
#define _VarI4FromR4(flt,out) VarI4FromR8((double)flt,out)
#define _VarI4FromR8 VarI4FromR8
#define _VarI4FromCy VarI4FromCy
#define _VarI4FromDate(dt,out) VarI4FromR8((double)dt,out)
#define _VarI4FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_I4)
#define _VarI4FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, (BYTE*)out, VT_I4)
SIMPLE(LONG, VARIANT_BOOL, VarI4FromBool);
SIMPLE(LONG, signed char, VarI4FromI1);
SIMPLE(LONG, USHORT, VarI4FromUI2);
POSTST(LONG, ULONG, VarI4FromUI4, I4_MAX);
#define _VarI4FromDec VarI4FromDec
BOTHTST(LONG, LONG64, VarI4FromI8, I4_MIN, I4_MAX);
POSTST(LONG, ULONG64, VarI4FromUI8, I4_MAX);
/* UI4 */
SIMPLE(ULONG, BYTE, VarUI4FromUI1);
NEGTST(ULONG, SHORT, VarUI4FromI2);
NEGTST(ULONG, LONG, VarUI4FromI4);
#define _VarUI4FromR4(flt,out) VarUI4FromR8((double)flt,out)
#define _VarUI4FromR8 VarUI4FromR8
#define _VarUI4FromCy VarUI4FromCy
#define _VarUI4FromDate(dt,out) VarUI4FromR8((double)dt,out)
#define _VarUI4FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_UI4)
#define _VarUI4FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_UI4)
SIMPLE(ULONG, VARIANT_BOOL, VarUI4FromBool);
NEGTST(ULONG, signed char, VarUI4FromI1);
SIMPLE(ULONG, USHORT, VarUI4FromUI2);
#define _VarUI4FromDec VarUI4FromDec
BOTHTST(ULONG, LONG64, VarUI4FromI8, UI4_MIN, UI4_MAX);
POSTST(ULONG, ULONG64, VarUI4FromUI8, UI4_MAX);
/* I8 */
SIMPLE(LONG64, BYTE, VarI8FromUI1);
SIMPLE(LONG64, SHORT, VarI8FromI2);
#define _VarI8FromR4 VarI8FromR8
#define _VarI8FromR8 VarI8FromR8
#define _VarI8FromCy VarI8FromCy
#define _VarI8FromDate(dt,out) VarI8FromR8((double)dt,out)
#define _VarI8FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_I8)
#define _VarI8FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_I8)
#define _VarI8FromBool _VarI8FromI2
SIMPLE(LONG64, signed char, VarI8FromI1);
SIMPLE(LONG64, USHORT, VarI8FromUI2);
SIMPLE(LONG64, LONG, VarI8FromI4);
SIMPLE(LONG64, ULONG, VarI8FromUI4);
#define _VarI8FromDec VarI8FromDec
POSTST(LONG64, ULONG64, VarI8FromUI8, I8_MAX);
/* UI8 */
SIMPLE(ULONG64, BYTE, VarUI8FromUI1);
NEGTST(ULONG64, SHORT, VarUI8FromI2);
#define _VarUI8FromR4 VarUI8FromR8
#define _VarUI8FromR8 VarUI8FromR8
#define _VarUI8FromCy VarUI8FromCy
#define _VarUI8FromDate(dt,out) VarUI8FromR8((double)dt,out)
#define _VarUI8FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_UI8)
#define _VarUI8FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_UI8)
#define _VarUI8FromBool _VarI8FromI2
NEGTST(ULONG64, signed char, VarUI8FromI1);
SIMPLE(ULONG64, USHORT, VarUI8FromUI2);
NEGTST(ULONG64, LONG, VarUI8FromI4);
SIMPLE(ULONG64, ULONG, VarUI8FromUI4);
#define _VarUI8FromDec VarUI8FromDec
NEGTST(ULONG64, LONG64, VarUI8FromI8);
/* R4 (float) */
SIMPLE(float, BYTE, VarR4FromUI1);
SIMPLE(float, SHORT, VarR4FromI2);
RETTYP _VarR4FromR8(double i, float* o) {
double d = i < 0.0 ? -i : i;
if (d > R4_MAX) return DISP_E_OVERFLOW;
*o = i;
return S_OK;
}
RETTYP _VarR4FromCy(CY i, float* o) { *o = (double)i.int64 / CY_MULTIPLIER_F; return S_OK; }
#define _VarR4FromDate(dt,out) _VarR4FromR8((double)dt,out)
#define _VarR4FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_R4)
#define _VarR4FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_R4)
#define _VarR4FromBool _VarR4FromI2
SIMPLE(float, signed char, VarR4FromI1);
SIMPLE(float, USHORT, VarR4FromUI2);
SIMPLE(float, LONG, VarR4FromI4);
SIMPLE(float, ULONG, VarR4FromUI4);
#define _VarR4FromDec VarR4FromDec
SIMPLE(float, LONG64, VarR4FromI8);
SIMPLE(float, ULONG64, VarR4FromUI8);
/* R8 (double) */
SIMPLE(double, BYTE, VarR8FromUI1);
SIMPLE(double, SHORT, VarR8FromI2);
SIMPLE(double, float, VarR8FromR4);
RETTYP _VarR8FromCy(CY i, double* o) { *o = (double)i.int64 / CY_MULTIPLIER_F; return S_OK; }
SIMPLE(double, DATE, VarR8FromDate);
#define _VarR8FromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_R8)
#define _VarR8FromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_R8)
#define _VarR8FromBool _VarR8FromI2
SIMPLE(double, signed char, VarR8FromI1);
SIMPLE(double, USHORT, VarR8FromUI2);
SIMPLE(double, LONG, VarR8FromI4);
SIMPLE(double, ULONG, VarR8FromUI4);
#define _VarR8FromDec VarR8FromDec
SIMPLE(double, LONG64, VarR8FromI8);
SIMPLE(double, ULONG64, VarR8FromUI8);
/* BOOL */
#define BOOLFUNC(src, func) RETTYP _##func(src in, VARIANT_BOOL* out) { \
*out = in ? VARIANT_TRUE : VARIANT_FALSE; return S_OK; }
BOOLFUNC(signed char,VarBoolFromI1);
BOOLFUNC(BYTE,VarBoolFromUI1);
BOOLFUNC(SHORT,VarBoolFromI2);
BOOLFUNC(USHORT,VarBoolFromUI2);
BOOLFUNC(LONG,VarBoolFromI4);
BOOLFUNC(ULONG,VarBoolFromUI4);
BOOLFUNC(LONG64,VarBoolFromI8);
BOOLFUNC(ULONG64,VarBoolFromUI8);
#define _VarBoolFromR4(flt,out) _VarBoolFromR8((double)flt,out)
BOOLFUNC(double,VarBoolFromR8);
#define _VarBoolFromCy(i,o) _VarBoolFromI8(i.int64,o)
#define _VarBoolFromDate(dt,out) _VarBoolFromR8((double)dt,out)
#define _VarBoolFromStr VarBoolFromStr
#define _VarBoolFromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, (BYTE*)out, VT_BOOL)
#define _VarBoolFromDec VarBoolFromDec
/* Internal flags for low level conversion functions */ /* Internal flags for low level conversion functions */
#define VAR_BOOLONOFF 0x0400 /* Convert bool to "On"/"Off" */ #define VAR_BOOLONOFF 0x0400 /* Convert bool to "On"/"Off" */
#define VAR_BOOLYESNO 0x0800 /* Convert bool to "Yes"/"No" */ #define VAR_BOOLYESNO 0x0800 /* Convert bool to "Yes"/"No" */
#define VAR_NEGATIVE 0x1000 /* Number is negative */ #define VAR_NEGATIVE 0x1000 /* Number is negative */
/* DECIMAL */
#define _VarDecFromUI1 VarDecFromUI4
#define _VarDecFromI2 VarDecFromI4
#define _VarDecFromR4 VarDecFromR4
#define _VarDecFromR8 VarDecFromR8
#define _VarDecFromCy VarDecFromCy
#define _VarDecFromDate(dt,out) VarDecFromR8((double)dt,out)
#define _VarDecFromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_DECIMAL)
#define _VarDecFromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_DECIMAL)
#define _VarDecFromBool VarDecFromBool
#define _VarDecFromI1 VarDecFromI4
#define _VarDecFromUI2 VarDecFromUI4
#define _VarDecFromI4 VarDecFromI4
#define _VarDecFromUI4 VarDecFromUI4
#define _VarDecFromI8 VarDecFromI8
#define _VarDecFromUI8 VarDecFromUI8
/* CY (Currency) */
#define _VarCyFromUI1 VarCyFromR8
#define _VarCyFromI2 VarCyFromR8
#define _VarCyFromR4 VarCyFromR8
#define _VarCyFromR8 VarCyFromR8
#define _VarCyFromDate VarCyFromR8
#define _VarCyFromStr(str,lcid,flags,out) VARIANT_NumberFromBstr(str,lcid,flags,(BYTE*)out,VT_CY)
#define _VarCyFromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_CY)
#define _VarCyFromBool VarCyFromR8
#define _VarCyFromI1 VarCyFromR8
#define _VarCyFromUI2 VarCyFromR8
#define _VarCyFromI4 VarCyFromR8
#define _VarCyFromUI4 VarCyFromR8
#define _VarCyFromDec VarCyFromDec
RETTYP _VarCyFromI8(LONG64 i, CY* o) {
if (i <= (I8_MIN/CY_MULTIPLIER) || i >= (I8_MAX/CY_MULTIPLIER)) return DISP_E_OVERFLOW;
o->int64 = i * CY_MULTIPLIER;
return S_OK;
}
#define _VarCyFromUI8 VarCyFromR8
/* DATE */
#define _VarDateFromUI1 _VarR8FromUI1
#define _VarDateFromI2 _VarR8FromI2
#define _VarDateFromR4 _VarDateFromR8
RETTYP _VarDateFromR8(double i, DATE* o) {
if (i <= (DATE_MIN - 1.0) || i >= (DATE_MAX + 1.0)) return DISP_E_OVERFLOW;
*o = (DATE)i;
return S_OK;
}
#define _VarDateFromCy _VarR8FromCy
#define _VarDateFromStr VarDateFromStr
#define _VarDateFromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_DATE)
#define _VarDateFromBool _VarR8FromBool
#define _VarDateFromI1 _VarR8FromI1
#define _VarDateFromUI2 _VarR8FromUI2
#define _VarDateFromI4 _VarDateFromR8
#define _VarDateFromUI4 _VarDateFromR8
#define _VarDateFromDec _VarR8FromDec
RETTYP _VarDateFromI8(LONG64 i, DATE* o) {
if (i < DATE_MIN || i > DATE_MAX) return DISP_E_OVERFLOW;
*o = (DATE)i;
return S_OK;
}
RETTYP _VarDateFromUI8(ULONG64 i, DATE* o) {
if (i > DATE_MAX) return DISP_E_OVERFLOW;
*o = (DATE)i;
return S_OK;
}
/* BSTR */
#define _VarBstrFromUI1 VarBstrFromUI4
#define _VarBstrFromI2 VarBstrFromI4
#define _VarBstrFromR4 VarBstrFromR8
#define _VarBstrFromR8 VarBstrFromR8
#define _VarBstrFromCy VarBstrFromCy
#define _VarBstrFromDate VarBstrFromDate
#define _VarBstrFromDisp(disp,lcid,out) VARIANT_FromDisp(disp, lcid, out, VT_BSTR)
#define _VarBstrFromBool VarBstrFromBool
#define _VarBstrFromI1 VarBstrFromI4
#define _VarBstrFromUI2 VarBstrFromUI4
#define _VarBstrFromI4 VarBstrFromI4
#define _VarBstrFromUI4 VarBstrFromUI4
#define _VarBstrFromDec VarBstrFromDec
#define _VarBstrFromI8 VarBstrFromI8
#define _VarBstrFromUI8 VarBstrFromUI8
/* Macro to inline conversion from a float or double to any integer type,
* rounding according to the 'dutch' convention.
*/
#define OLEAUT32_DutchRound(typ, value, res) do { \
double whole = (double)value < 0 ? ceil((double)value) : floor((double)value); \
double fract = (double)value - whole; \
if (fract > 0.5) res = (typ)whole + (typ)1; \
else if (fract == 0.5) { typ is_odd = (typ)whole & 1; res = whole + is_odd; } \
else if (fract >= 0.0) res = (typ)whole; \
else if (fract == -0.5) { typ is_odd = (typ)whole & 1; res = whole - is_odd; } \
else if (fract > -0.5) res = (typ)whole; \
else res = (typ)whole - (typ)1; \
} while(0);
/* The localised characters that make up a valid number */ /* The localised characters that make up a valid number */
typedef struct tagVARIANT_NUMBER_CHARS typedef struct tagVARIANT_NUMBER_CHARS
{ {

File diff suppressed because it is too large Load diff