-Fixed MESSAGE functions that were thunking down to 16 bits implementation.
[wine] / include / ole.h
1 /*
2  *      ole.h   -       Declarations for OLESVR and OLECLI
3  */
4
5 #ifndef __WINE_OLE_H
6 #define __WINE_OLE_H
7
8 #include "wingdi.h"
9
10 /* FIXME: we need to include wtypes.h mainly, it seems, because we need BSTR. 
11  * Normally none of the APIs in ole.h depend on it. It is most likey that they should 
12  * be moved to ole2.h (which includes objbase.h and thus wtypes.h) or some other 
13  * OLE include
14  */
15 #include "wtypes.h"
16
17
18 #define OLESTR16(x) x
19 #define OLESTR32(x) L##x        /* probably wrong */
20 #define OLESTR WINELIB_NAME(OLESTR)
21
22 typedef unsigned short VARTYPE;
23 typedef LONG DISPID;
24
25 /* object types */
26 #define OT_LINK         1
27 #define OT_EMBEDDED     2
28 #define OT_STATIC       3
29
30 /* activate verbs */
31 #define OLEVERB_PRIMARY 0
32
33 typedef enum
34 {
35     OLE_OK,
36     OLE_WAIT_FOR_RELEASE,
37     OLE_BUSY,
38     OLE_ERROR_PROTECT_ONLY,
39     OLE_ERROR_MEMORY,
40     OLE_ERROR_STREAM,
41     OLE_ERROR_STATIC,
42     OLE_ERROR_BLANK,
43     OLE_ERROR_DRAW,
44     OLE_ERROR_METAFILE,
45     OLE_ERROR_ABORT,
46     OLE_ERROR_CLIPBOARD,
47     OLE_ERROR_FORMAT,
48     OLE_ERROR_OBJECT,
49     OLE_ERROR_OPTION,
50     OLE_ERROR_PROTOCOL,
51     OLE_ERROR_ADDRESS,
52     OLE_ERROR_NOT_EQUAL,
53     OLE_ERROR_HANDLE,
54     OLE_ERROR_GENERIC,
55     OLE_ERROR_CLASS,
56     OLE_ERROR_SYNTAX,
57     OLE_ERROR_DATATYPE,
58     OLE_ERROR_PALETTE,
59     OLE_ERROR_NOT_LINK,
60     OLE_ERROR_NOT_EMPTY,
61     OLE_ERROR_SIZE,
62     OLE_ERROR_DRIVE,
63     OLE_ERROR_NETWORK,
64     OLE_ERROR_NAME,
65     OLE_ERROR_TEMPLATE,
66     OLE_ERROR_NEW,
67     OLE_ERROR_EDIT,
68     OLE_ERROR_OPEN,
69     OLE_ERROR_NOT_OPEN,
70     OLE_ERROR_LAUNCH,
71     OLE_ERROR_COMM,
72     OLE_ERROR_TERMINATE,
73     OLE_ERROR_COMMAND,
74     OLE_ERROR_SHOW,
75     OLE_ERROR_DOVERB,
76     OLE_ERROR_ADVISE_NATIVE,
77     OLE_ERROR_ADVISE_PICT,
78     OLE_ERROR_ADVISE_RENAME,
79     OLE_ERROR_POKE_NATIVE,
80     OLE_ERROR_REQUEST_NATIVE,
81     OLE_ERROR_REQUEST_PICT,
82     OLE_ERROR_SERVER_BLOCKED,
83     OLE_ERROR_REGISTRATION,
84     OLE_ERROR_ALREADY_REGISTERED,
85     OLE_ERROR_TASK,
86     OLE_ERROR_OUTOFDATE,
87     OLE_ERROR_CANT_UPDATE_CLIENT,
88     OLE_ERROR_UPDATE,
89     OLE_ERROR_SETDATA_FORMAT,
90     OLE_ERROR_STATIC_FROM_OTHER_OS,
91     OLE_WARN_DELETE_DATA = 1000
92 } OLESTATUS;
93
94 typedef enum {
95         OLE_SERVER_MULTI,
96         OLE_SERVER_SINGLE
97 } OLE_SERVER_USE;
98
99 typedef enum {
100         OLE_CHANGED,
101         OLE_SAVED,
102         OLE_CLOSED,
103         OLE_RENAMED,
104         OLE_QUERY_PAINT,
105         OLE_RELEASE,
106         OLE_QUERY_RETRY
107 } OLE_NOTIFICATION;
108
109 typedef enum {
110         olerender_none,
111         olerender_draw,
112         olerender_format
113 } OLEOPT_RENDER;
114
115 typedef enum {
116         oleupdate_always,
117         oleupdate_onsave,
118         oleupdate_oncall,
119         oleupdate_onclose
120 } OLEOPT_UPDATE;
121
122 typedef LONG    LHSERVER;
123 typedef LONG    LHSERVERDOC;
124 typedef LONG    LHCLIENTDOC;
125 typedef LONG    OLECLIPFORMAT;/* dunno about this type, please change/add */
126 typedef OLEOPT_UPDATE*  LPOLEOPT_UPDATE;
127
128 typedef enum {
129         OLE_NONE,       /* none */
130         OLE_DELETE,     /* delete object */
131         OLE_LNKPASTE,   /* link paste */
132         OLE_EMBPASTE,   /* paste(and update) */
133         OLE_SHOW,
134         OLE_RUN,
135         OLE_ACTIVATE,
136         OLE_UPDATE,
137         OLE_CLOSE,
138         OLE_RECONNECT,
139         OLE_SETUPDATEOPTIONS,
140         OLE_SERVERRUNLAUNCH,    /* unlaunch (terminate?) server */
141         OLE_LOADFROMSTREAM,     /* (auto reconnect) */
142         OLE_SETDATA,            /* OleSetData */
143         OLE_REQUESTDATA,        /* OleRequestData */
144         OLE_OTHER,
145         OLE_CREATE,
146         OLE_CREATEFROMTEMPLATE,
147         OLE_CREATELINKFROMFILE,
148         OLE_COPYFROMLNK,
149         OLE_CREATREFROMFILE,
150         OLE_CREATEINVISIBLE
151 } OLE_RELEASE_METHOD;
152
153 typedef struct _OLETARGETDEVICE {
154         UINT16  otdDeviceNameOffset;
155         UINT16  otdDriverNameOffset;
156         UINT16  otdPortNameOffset;
157         UINT16  otdExtDevmodeOffset;
158         UINT16  otdExtDevmodeSize;
159         UINT16  otdEnvironmentOffset;
160         UINT16  otdEnvironmentSize;
161         BYTE    otdData[1];
162         /* ... */
163 } OLETARGETDEVICE;
164 typedef struct _OLESTREAM* LPOLESTREAM;
165 typedef struct _OLESTREAMVTBL {
166         DWORD   (CALLBACK *Get)(LPOLESTREAM,LPSTR,DWORD);
167         DWORD   (CALLBACK *Put)(LPOLESTREAM,LPSTR,DWORD);
168 } OLESTREAMVTBL;
169 typedef OLESTREAMVTBL*  LPOLESTREAMVTBL;
170 typedef struct _OLESTREAM {
171         LPOLESTREAMVTBL lpstbl;
172 } OLESTREAM;
173 typedef struct _OLESERVERDOC*   LPOLESERVERDOC;
174 typedef struct _OLEOBJECT*      LPOLEOBJECT;
175 typedef struct _OLECLIENT*      LPOLECLIENT;
176 typedef struct _OLESERVERDOCVTBL {
177         OLESTATUS       (CALLBACK *Save)(LPOLESERVERDOC);
178         OLESTATUS       (CALLBACK *Close)(LPOLESERVERDOC);
179         OLESTATUS       (CALLBACK *SetHostNames)(LPOLESERVERDOC,LPCOLESTR16,LPCOLESTR16);
180         OLESTATUS       (CALLBACK *SetDocDimensions)(LPOLESERVERDOC,LPRECT16);
181 #ifdef __WINE__
182 /* GetObject is a WINELIB_NAME macro so it cannot be used in Wine itself */
183         OLESTATUS       (CALLBACK *pGetObject)(LPOLESERVERDOC,LPCOLESTR16,LPOLEOBJECT*,LPOLECLIENT);
184 #else
185         OLESTATUS       (CALLBACK *GetObject)(LPOLESERVERDOC,LPCOLESTR16,LPOLEOBJECT*,LPOLECLIENT);
186 #endif
187         OLESTATUS       (CALLBACK *Release)(LPOLESERVERDOC);
188         OLESTATUS       (CALLBACK *SetColorScheme)(LPOLESERVERDOC,LPLOGPALETTE);
189         OLESTATUS       (CALLBACK *Execute)(LPOLESERVERDOC,HGLOBAL16);
190 } OLESERVERDOCVTBL;
191 typedef OLESERVERDOCVTBL*       LPOLESERVERDOCVTBL;
192 typedef struct _OLESERVERDOC {
193         LPOLESERVERDOCVTBL      lpvtbl;
194         /* server provided state info */
195 } OLESERVERDOC;
196
197 typedef struct _OLESERVER*      LPOLESERVER;
198 typedef struct _OLESERVERVTBL {
199         OLESTATUS       (CALLBACK *Open)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPOLESERVERDOC *);
200         OLESTATUS       (CALLBACK *Create)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC*);
201         OLESTATUS       (CALLBACK *CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *);
202         OLESTATUS       (CALLBACK *Edit)(LPOLESERVER,LHSERVERDOC,LPCOLESTR16,LPCOLESTR16,LPOLESERVERDOC *);
203         OLESTATUS       (CALLBACK *Exit)(LPOLESERVER);
204         OLESTATUS       (CALLBACK *Release)(LPOLESERVER); 
205         OLESTATUS       (CALLBACK *Execute)(LPOLESERVER); 
206 } OLESERVERVTBL; 
207 typedef OLESERVERVTBL   *LPOLESERVERVTBL;
208 typedef struct _OLESERVER {
209         LPOLESERVERVTBL lpvtbl;
210         /* server specific data */
211 } OLESERVER;
212 typedef struct _OLECLIENTVTBL {
213         int (CALLBACK *CallBack)(LPOLECLIENT,OLE_NOTIFICATION,LPOLEOBJECT);
214 } OLECLIENTVTBL;
215 typedef OLECLIENTVTBL   *LPOLECLIENTVTBL;
216
217 typedef struct _OLECLIENT {
218         LPOLECLIENTVTBL lpvtbl;
219         /* client data... */
220 } OLECLIENT;
221
222 typedef struct _OLEOBJECTVTBL {
223         void *          (CALLBACK *QueryProtocol)(LPOLEOBJECT,LPCOLESTR16);
224         OLESTATUS       (CALLBACK *Release)(LPOLEOBJECT);
225         OLESTATUS       (CALLBACK *Show)(LPOLEOBJECT,BOOL16);
226         OLESTATUS       (CALLBACK *DoVerb)(LPOLEOBJECT,UINT16,BOOL16,BOOL16);
227         OLESTATUS       (CALLBACK *GetData)(LPOLEOBJECT,OLECLIPFORMAT,HANDLE16 *);
228         OLESTATUS       (CALLBACK *SetData)(LPOLEOBJECT,OLECLIPFORMAT,HANDLE16);
229         OLESTATUS       (CALLBACK *SetTargetDevice)(LPOLEOBJECT,HGLOBAL16);
230         OLESTATUS       (CALLBACK *SetBounds)(LPOLEOBJECT,LPRECT16);
231         OLESTATUS       (CALLBACK *EnumFormats)(LPOLEOBJECT,OLECLIPFORMAT);
232         OLESTATUS       (CALLBACK *SetColorScheme)(LPOLEOBJECT,LPLOGPALETTE);
233         OLESTATUS       (CALLBACK *Delete)(LPOLEOBJECT);
234         OLESTATUS       (CALLBACK *SetHostNames)(LPOLEOBJECT,LPCOLESTR16,LPCOLESTR16);
235         OLESTATUS       (CALLBACK *SaveToStream)(LPOLEOBJECT,LPOLESTREAM);
236         OLESTATUS       (CALLBACK *Clone)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,LPOLEOBJECT *);
237         OLESTATUS       (CALLBACK *CopyFromLink)(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,LPOLEOBJECT *);
238         OLESTATUS       (CALLBACK *Equal)(LPOLEOBJECT,LPOLEOBJECT);
239         OLESTATUS       (CALLBACK *CopyToClipBoard)(LPOLEOBJECT);
240         OLESTATUS       (CALLBACK *Draw)(LPOLEOBJECT,HDC16,LPRECT16,LPRECT16,HDC16);
241         OLESTATUS       (CALLBACK *Activate)(LPOLEOBJECT,UINT16,BOOL16,BOOL16,HWND16,LPRECT16);
242         OLESTATUS       (CALLBACK *Execute)(LPOLEOBJECT,HGLOBAL16,UINT16);
243         OLESTATUS       (CALLBACK *Close)(LPOLEOBJECT);
244         OLESTATUS       (CALLBACK *Update)(LPOLEOBJECT);
245         OLESTATUS       (CALLBACK *Reconnect)(LPOLEOBJECT);
246         OLESTATUS       (CALLBACK *ObjectConvert)(LPOLEOBJECT,LPCOLESTR16,LPOLECLIENT,LHCLIENTDOC,LPCOLESTR16,LPOLEOBJECT*);
247         OLESTATUS       (CALLBACK *GetLinkUpdateOptions)(LPOLEOBJECT,LPOLEOPT_UPDATE);
248         OLESTATUS       (CALLBACK *SetLinkUpdateOptions)(LPOLEOBJECT,OLEOPT_UPDATE);
249         OLESTATUS       (CALLBACK *Rename)(LPOLEOBJECT,LPCOLESTR16);
250         OLESTATUS       (CALLBACK *QueryName)(LPOLEOBJECT,LPSTR,LPUINT16);
251         OLESTATUS       (CALLBACK *QueryType)(LPOLEOBJECT,LPLONG);
252         OLESTATUS       (CALLBACK *QueryBounds)(LPOLEOBJECT,LPRECT16);
253         OLESTATUS       (CALLBACK *QuerySize)(LPOLEOBJECT,LPDWORD);
254         OLESTATUS       (CALLBACK *QueryOpen)(LPOLEOBJECT);
255         OLESTATUS       (CALLBACK *QueryOutOfDate)(LPOLEOBJECT);
256         OLESTATUS       (CALLBACK *QueryReleaseStatus)(LPOLEOBJECT);
257         OLESTATUS       (CALLBACK *QueryReleaseError)(LPOLEOBJECT);
258         OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod)(LPOLEOBJECT);
259         OLESTATUS       (CALLBACK *RequestData)(LPOLEOBJECT,OLECLIPFORMAT);
260         OLESTATUS       (CALLBACK *ObjectLong)(LPOLEOBJECT,UINT16,LPLONG);
261 } OLEOBJECTVTBL;
262 typedef OLEOBJECTVTBL*  LPOLEOBJECTVTBL;
263
264 typedef struct _OLEOBJECT {
265         LPOLEOBJECTVTBL lpvtbl;
266 } OLEOBJECT;
267
268
269 OLESTATUS WINAPI OleRegisterServer(LPCSTR,LPOLESERVER,LHSERVER *,HINSTANCE16,OLE_SERVER_USE);
270 OLESTATUS WINAPI OleUnblockServer(LHSERVER,BOOL16 *);
271 OLESTATUS WINAPI OleRegisterServerDoc(LHSERVER,LPCSTR,LPOLESERVERDOC,LHSERVERDOC *);
272 OLESTATUS WINAPI OleRegisterClientDoc(LPCSTR,LPCSTR,LONG,LHCLIENTDOC *);
273 OLESTATUS WINAPI OleRenameClientDoc(LHCLIENTDOC,LPCSTR);
274 OLESTATUS WINAPI OleRevokeServerDoc(LHSERVERDOC);
275 OLESTATUS WINAPI OleRevokeClientDoc(LHCLIENTDOC);
276 OLESTATUS WINAPI OleRevokeServer(LHSERVER);
277
278 /* com functions */
279 void WINAPI CoFreeUnusedLibraries(void);
280 HINSTANCE32 WINAPI CoLoadLibrary(LPSTR lpszLibName, BOOL32 bAutoFree);
281 void WINAPI CoFreeUnusedLibraries(void);
282 void WINAPI CoFreeAllLibraries(void);
283
284 typedef enum tagCALLCONV {
285     CC_CDECL            = 1,
286     CC_MSCPASCAL        = CC_CDECL + 1,
287     CC_PASCAL           = CC_MSCPASCAL,
288     CC_MACPASCAL        = CC_PASCAL + 1,
289     CC_STDCALL          = CC_MACPASCAL + 1,
290     CC_RESERVED         = CC_STDCALL + 1,
291     CC_SYSCALL          = CC_RESERVED + 1,
292     CC_MPWCDECL         = CC_SYSCALL + 1,
293     CC_MPWPASCAL        = CC_MPWCDECL + 1,
294     CC_MAX              = CC_MPWPASCAL + 1
295 } CALLCONV;
296
297 typedef struct tagPARAMDATA {
298     OLECHAR16 * szName;    /* parameter name */
299     VARTYPE vt;         /* parameter type */
300 } PARAMDATA, * LPPARAMDATA;
301
302 typedef struct tagMETHODDATA {
303     OLECHAR16 * szName;    /* method name */
304     PARAMDATA * ppdata;  /* pointer to an array of PARAMDATAs */
305     DISPID dispid;      /* method ID */
306     UINT16 iMeth;         /* method index */
307     CALLCONV cc;        /* calling convention */
308     UINT16 cArgs;         /* count of arguments */
309     WORD wFlags;        /* same wFlags as on IDispatch::Invoke() */
310     VARTYPE vtReturn;
311 } METHODDATA, * LPMETHODDATA;
312
313 typedef struct tagINTERFACEDATA {
314     METHODDATA * pmethdata;  /* pointer to an array of METHODDATAs */
315     UINT16 cMembers;      /* count of members */
316 } INTERFACEDATA, * LPINTERFACEDATA;
317
318
319 #endif  /* __WINE_OLE_H */