1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6#ifndef _OLE_H_
7#define _OLE_H_
8
9#ifdef _OLE2_H_
10#error You can't use ole.h and ole2.h together.
11#endif
12
13#ifdef __cplusplus
14extern "C" {
15#endif
16
17#ifndef WINAPI
18#define WINAPI __stdcall
19#define CALLBACK __stdcall
20#define LPCSTR LPSTR
21#define LRESULT LONG_PTR
22#define HGLOBAL HANDLE
23#endif
24
25#define OLE_LPCSTR LPCSTR
26#define OLE_CONST const
27
28#define LRESULT LONG_PTR
29#define HGLOBAL HANDLE
30
31#define OT_LINK __MSABI_LONG(1)
32#define OT_EMBEDDED __MSABI_LONG(2)
33#define OT_STATIC __MSABI_LONG(3)
34
35#define OLEVERB_PRIMARY 0
36
37  typedef struct _OLETARGETDEVICE {
38    USHORT otdDeviceNameOffset;
39    USHORT otdDriverNameOffset;
40    USHORT otdPortNameOffset;
41    USHORT otdExtDevmodeOffset;
42    USHORT otdExtDevmodeSize;
43    USHORT otdEnvironmentOffset;
44    USHORT otdEnvironmentSize;
45    BYTE otdData[1];
46  } OLETARGETDEVICE;
47
48  typedef OLETARGETDEVICE *LPOLETARGETDEVICE;
49
50#define OF_SET 0x0001
51#define OF_GET 0x0002
52#define OF_HANDLER 0x0004
53
54  typedef enum {
55    OLE_OK,OLE_WAIT_FOR_RELEASE,OLE_BUSY,OLE_ERROR_PROTECT_ONLY,OLE_ERROR_MEMORY,OLE_ERROR_STREAM,OLE_ERROR_STATIC,OLE_ERROR_BLANK,
56    OLE_ERROR_DRAW,OLE_ERROR_METAFILE,OLE_ERROR_ABORT,OLE_ERROR_CLIPBOARD,OLE_ERROR_FORMAT,OLE_ERROR_OBJECT,OLE_ERROR_OPTION,OLE_ERROR_PROTOCOL,
57    OLE_ERROR_ADDRESS,OLE_ERROR_NOT_EQUAL,OLE_ERROR_HANDLE,OLE_ERROR_GENERIC,OLE_ERROR_CLASS,OLE_ERROR_SYNTAX,OLE_ERROR_DATATYPE,OLE_ERROR_PALETTE,
58    OLE_ERROR_NOT_LINK,OLE_ERROR_NOT_EMPTY,OLE_ERROR_SIZE,OLE_ERROR_DRIVE,OLE_ERROR_NETWORK,OLE_ERROR_NAME,OLE_ERROR_TEMPLATE,OLE_ERROR_NEW,
59    OLE_ERROR_EDIT,OLE_ERROR_OPEN,OLE_ERROR_NOT_OPEN,OLE_ERROR_LAUNCH,OLE_ERROR_COMM,OLE_ERROR_TERMINATE,OLE_ERROR_COMMAND,OLE_ERROR_SHOW,
60    OLE_ERROR_DOVERB,OLE_ERROR_ADVISE_NATIVE,OLE_ERROR_ADVISE_PICT,OLE_ERROR_ADVISE_RENAME,OLE_ERROR_POKE_NATIVE,OLE_ERROR_REQUEST_NATIVE,
61    OLE_ERROR_REQUEST_PICT,OLE_ERROR_SERVER_BLOCKED,OLE_ERROR_REGISTRATION,OLE_ERROR_ALREADY_REGISTERED,OLE_ERROR_TASK,OLE_ERROR_OUTOFDATE,
62    OLE_ERROR_CANT_UPDATE_CLIENT,OLE_ERROR_UPDATE,OLE_ERROR_SETDATA_FORMAT,OLE_ERROR_STATIC_FROM_OTHER_OS,OLE_ERROR_FILE_VER,OLE_WARN_DELETE_DATA = 1000
63  } OLESTATUS;
64
65  typedef enum {
66    OLE_CHANGED,OLE_SAVED,OLE_CLOSED,OLE_RENAMED,OLE_QUERY_PAINT,OLE_RELEASE,OLE_QUERY_RETRY
67  } OLE_NOTIFICATION;
68
69  typedef enum {
70    OLE_NONE,OLE_DELETE,OLE_LNKPASTE,OLE_EMBPASTE,OLE_SHOW,OLE_RUN,OLE_ACTIVATE,OLE_UPDATE,OLE_CLOSE,OLE_RECONNECT,OLE_SETUPDATEOPTIONS,
71    OLE_SERVERUNLAUNCH,OLE_LOADFROMSTREAM,OLE_SETDATA,OLE_REQUESTDATA,OLE_OTHER,OLE_CREATE,OLE_CREATEFROMTEMPLATE,OLE_CREATELINKFROMFILE,
72    OLE_COPYFROMLNK,OLE_CREATEFROMFILE,OLE_CREATEINVISIBLE
73  } OLE_RELEASE_METHOD;
74
75  typedef enum {
76    olerender_none,olerender_draw,olerender_format
77  } OLEOPT_RENDER;
78
79  typedef WORD OLECLIPFORMAT;
80
81  typedef enum {
82    oleupdate_always,oleupdate_onsave,
83#ifdef OLE_INTERNAL
84    oleupdate_oncall,oleupdate_onclose
85#else
86    oleupdate_oncall
87#endif
88  } OLEOPT_UPDATE;
89
90  typedef HANDLE HOBJECT;
91  typedef LONG_PTR LHSERVER;
92  typedef LONG_PTR LHCLIENTDOC;
93  typedef LONG_PTR LHSERVERDOC;
94#ifndef _LPOLEOBJECT_DEFINED
95#define _LPOLEOBJECT_DEFINED
96  typedef struct _OLEOBJECT *LPOLEOBJECT;
97#endif
98  typedef struct _OLESTREAM *LPOLESTREAM;
99  typedef struct _OLECLIENT *LPOLECLIENT;
100
101  typedef struct _OLEOBJECTVTBL {
102    void *(CALLBACK *QueryProtocol) (LPOLEOBJECT,LPCSTR);
103    OLESTATUS (CALLBACK *Release) (LPOLEOBJECT);
104    OLESTATUS (CALLBACK *Show) (LPOLEOBJECT,WINBOOL);
105    OLESTATUS (CALLBACK *DoVerb) (LPOLEOBJECT,UINT,WINBOOL,WINBOOL);
106    OLESTATUS (CALLBACK *GetData) (LPOLEOBJECT,OLECLIPFORMAT,HANDLE *);
107    OLESTATUS (CALLBACK *SetData) (LPOLEOBJECT,OLECLIPFORMAT,HANDLE);
108    OLESTATUS (CALLBACK *SetTargetDevice) (LPOLEOBJECT,HGLOBAL);
109    OLESTATUS (CALLBACK *SetBounds) (LPOLEOBJECT,const RECT *);
110    OLECLIPFORMAT (CALLBACK *EnumFormats) (LPOLEOBJECT,OLECLIPFORMAT);
111    OLESTATUS (CALLBACK *SetColorScheme) (LPOLEOBJECT,const LOGPALETTE *);
112#ifndef SERVERONLY
113    OLESTATUS (CALLBACK *Delete) (LPOLEOBJECT);
114    OLESTATUS (CALLBACK *SetHostNames) (LPOLEOBJECT,LPCSTR,LPCSTR);
115    OLESTATUS (CALLBACK *SaveToStream) (LPOLEOBJECT,LPOLESTREAM);
116    OLESTATUS (CALLBACK *Clone) (LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
117    OLESTATUS (CALLBACK *CopyFromLink) (LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
118    OLESTATUS (CALLBACK *Equal)(LPOLEOBJECT,LPOLEOBJECT);
119    OLESTATUS (CALLBACK *CopyToClipboard)(LPOLEOBJECT);
120    OLESTATUS (CALLBACK *Draw)(LPOLEOBJECT,HDC,const RECT *,const RECT *,HDC);
121    OLESTATUS (CALLBACK *Activate)(LPOLEOBJECT,UINT,WINBOOL,WINBOOL,HWND,const RECT *);
122    OLESTATUS (CALLBACK *Execute)(LPOLEOBJECT,HGLOBAL,UINT);
123    OLESTATUS (CALLBACK *Close)(LPOLEOBJECT);
124    OLESTATUS (CALLBACK *Update)(LPOLEOBJECT);
125    OLESTATUS (CALLBACK *Reconnect) (LPOLEOBJECT);
126    OLESTATUS (CALLBACK *ObjectConvert) (LPOLEOBJECT,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
127    OLESTATUS (CALLBACK *GetLinkUpdateOptions) (LPOLEOBJECT,OLEOPT_UPDATE *);
128    OLESTATUS (CALLBACK *SetLinkUpdateOptions) (LPOLEOBJECT,OLEOPT_UPDATE);
129    OLESTATUS (CALLBACK *Rename) (LPOLEOBJECT,LPCSTR);
130    OLESTATUS (CALLBACK *QueryName) (LPOLEOBJECT,LPSTR,UINT *);
131    OLESTATUS (CALLBACK *QueryType) (LPOLEOBJECT,LONG *);
132    OLESTATUS (CALLBACK *QueryBounds) (LPOLEOBJECT,RECT *);
133    OLESTATUS (CALLBACK *QuerySize) (LPOLEOBJECT,DWORD *);
134    OLESTATUS (CALLBACK *QueryOpen) (LPOLEOBJECT);
135    OLESTATUS (CALLBACK *QueryOutOfDate) (LPOLEOBJECT);
136    OLESTATUS (CALLBACK *QueryReleaseStatus) (LPOLEOBJECT);
137    OLESTATUS (CALLBACK *QueryReleaseError) (LPOLEOBJECT);
138    OLE_RELEASE_METHOD (CALLBACK *QueryReleaseMethod)(LPOLEOBJECT);
139    OLESTATUS (CALLBACK *RequestData) (LPOLEOBJECT,OLECLIPFORMAT);
140    OLESTATUS (CALLBACK *ObjectLong) (LPOLEOBJECT,UINT,LONG *);
141    OLESTATUS (CALLBACK *ChangeData) (LPOLEOBJECT,HANDLE,LPOLECLIENT,WINBOOL);
142#endif
143  } OLEOBJECTVTBL;
144
145  typedef OLEOBJECTVTBL *LPOLEOBJECTVTBL;
146
147#ifndef OLE_INTERNAL
148  typedef struct _OLEOBJECT {
149    LPOLEOBJECTVTBL lpvtbl;
150  } OLEOBJECT;
151#endif
152
153  typedef struct _OLECLIENTVTBL {
154    int (CALLBACK *CallBack)(LPOLECLIENT,OLE_NOTIFICATION,LPOLEOBJECT);
155  } OLECLIENTVTBL;
156
157  typedef OLECLIENTVTBL *LPOLECLIENTVTBL;
158
159  typedef struct _OLECLIENT {
160    LPOLECLIENTVTBL lpvtbl;
161  } OLECLIENT;
162
163#ifndef _DEFINED_OLESTREAMVRBL
164#define _DEFINED_OLESTREAMVRBL
165  typedef struct _OLESTREAMVTBL {
166    DWORD (CALLBACK *Get)(LPOLESTREAM,void *,DWORD);
167    DWORD (CALLBACK *Put)(LPOLESTREAM,const void *,DWORD);
168  } OLESTREAMVTBL;
169  typedef OLESTREAMVTBL *LPOLESTREAMVTBL;
170#endif
171
172#ifndef _DEFINED_OLESTREAM
173#define _DEFINED_OLESTREAM
174  typedef struct _OLESTREAM {
175    LPOLESTREAMVTBL lpstbl;
176  } OLESTREAM;
177#endif
178
179  OLESTATUS WINAPI OleDelete(LPOLEOBJECT);
180  OLESTATUS WINAPI OleRelease(LPOLEOBJECT);
181  OLESTATUS WINAPI OleSaveToStream(LPOLEOBJECT,LPOLESTREAM);
182  OLESTATUS WINAPI OleEqual(LPOLEOBJECT,LPOLEOBJECT);
183  OLESTATUS WINAPI OleCopyToClipboard(LPOLEOBJECT);
184  OLESTATUS WINAPI OleSetHostNames(LPOLEOBJECT,LPCSTR,LPCSTR);
185  OLESTATUS WINAPI OleSetTargetDevice(LPOLEOBJECT,HGLOBAL);
186  OLESTATUS WINAPI OleSetBounds(LPOLEOBJECT,const RECT *);
187  OLESTATUS WINAPI OleSetColorScheme(LPOLEOBJECT,const LOGPALETTE *);
188  OLESTATUS WINAPI OleQueryBounds(LPOLEOBJECT,RECT *);
189  OLESTATUS WINAPI OleQuerySize(LPOLEOBJECT,DWORD *);
190  OLESTATUS WINAPI OleDraw(LPOLEOBJECT,HDC,const RECT *,const RECT *,HDC);
191  OLESTATUS WINAPI OleQueryOpen(LPOLEOBJECT);
192  OLESTATUS WINAPI OleActivate(LPOLEOBJECT,UINT,WINBOOL,WINBOOL,HWND,const RECT *);
193  OLESTATUS WINAPI OleExecute(LPOLEOBJECT,HGLOBAL,UINT);
194  OLESTATUS WINAPI OleClose(LPOLEOBJECT);
195  OLESTATUS WINAPI OleUpdate(LPOLEOBJECT);
196  OLESTATUS WINAPI OleReconnect(LPOLEOBJECT);
197  OLESTATUS WINAPI OleGetLinkUpdateOptions(LPOLEOBJECT,OLEOPT_UPDATE *);
198  OLESTATUS WINAPI OleSetLinkUpdateOptions(LPOLEOBJECT,OLEOPT_UPDATE);
199  void *WINAPI OleQueryProtocol(LPOLEOBJECT,LPCSTR);
200  OLESTATUS WINAPI OleQueryReleaseStatus(LPOLEOBJECT);
201  OLESTATUS WINAPI OleQueryReleaseError(LPOLEOBJECT);
202  OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod(LPOLEOBJECT);
203  OLESTATUS WINAPI OleQueryType(LPOLEOBJECT,LONG *);
204  DWORD WINAPI OleQueryClientVersion(void);
205  DWORD WINAPI OleQueryServerVersion(void);
206  OLECLIPFORMAT WINAPI OleEnumFormats(LPOLEOBJECT,OLECLIPFORMAT);
207  OLESTATUS WINAPI OleGetData(LPOLEOBJECT,OLECLIPFORMAT,HANDLE *);
208  OLESTATUS WINAPI OleSetData(LPOLEOBJECT,OLECLIPFORMAT,HANDLE);
209  OLESTATUS WINAPI OleQueryOutOfDate(LPOLEOBJECT);
210  OLESTATUS WINAPI OleRequestData(LPOLEOBJECT,OLECLIPFORMAT);
211  OLESTATUS WINAPI OleQueryLinkFromClip(LPCSTR,OLEOPT_RENDER,OLECLIPFORMAT);
212  OLESTATUS WINAPI OleQueryCreateFromClip(LPCSTR,OLEOPT_RENDER,OLECLIPFORMAT);
213  OLESTATUS WINAPI OleCreateFromClip(LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT);
214  OLESTATUS WINAPI OleCreateLinkFromClip(LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT);
215  OLESTATUS WINAPI OleCreateFromFile(LPCSTR,LPOLECLIENT,LPCSTR,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT);
216  OLESTATUS WINAPI OleCreateLinkFromFile(LPCSTR,LPOLECLIENT,LPCSTR,LPCSTR,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT);
217  OLESTATUS WINAPI OleLoadFromStream(LPOLESTREAM,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
218  OLESTATUS WINAPI OleCreate(LPCSTR,LPOLECLIENT,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT);
219  OLESTATUS WINAPI OleCreateInvisible(LPCSTR,LPOLECLIENT,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT,WINBOOL);
220  OLESTATUS WINAPI OleCreateFromTemplate(LPCSTR,LPOLECLIENT,LPCSTR,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *,OLEOPT_RENDER,OLECLIPFORMAT);
221  OLESTATUS WINAPI OleClone(LPOLEOBJECT,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
222  OLESTATUS WINAPI OleCopyFromLink(LPOLEOBJECT,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
223  OLESTATUS WINAPI OleObjectConvert(LPOLEOBJECT,LPCSTR,LPOLECLIENT,LHCLIENTDOC,LPCSTR,LPOLEOBJECT *);
224  OLESTATUS WINAPI OleRename(LPOLEOBJECT,LPCSTR);
225  OLESTATUS WINAPI OleQueryName(LPOLEOBJECT,LPSTR,UINT *);
226  OLESTATUS WINAPI OleRevokeObject(LPOLECLIENT);
227  WINBOOL WINAPI OleIsDcMeta(HDC);
228  OLESTATUS WINAPI OleRegisterClientDoc(LPCSTR,LPCSTR,LONG,LHCLIENTDOC *);
229  OLESTATUS WINAPI OleRevokeClientDoc(LHCLIENTDOC);
230  OLESTATUS WINAPI OleRenameClientDoc(LHCLIENTDOC,LPCSTR);
231  OLESTATUS WINAPI OleRevertClientDoc(LHCLIENTDOC);
232  OLESTATUS WINAPI OleSavedClientDoc(LHCLIENTDOC);
233  OLESTATUS WINAPI OleEnumObjects(LHCLIENTDOC,LPOLEOBJECT *);
234
235  typedef enum {
236    OLE_SERVER_MULTI,OLE_SERVER_SINGLE
237  } OLE_SERVER_USE;
238
239  typedef struct _OLESERVER *LPOLESERVER;
240
241  OLESTATUS WINAPI OleRegisterServer(LPCSTR,LPOLESERVER,LHSERVER *,HINSTANCE,OLE_SERVER_USE);
242  OLESTATUS WINAPI OleRevokeServer(LHSERVER);
243  OLESTATUS WINAPI OleBlockServer(LHSERVER);
244  OLESTATUS WINAPI OleUnblockServer(LHSERVER,WINBOOL *);
245  OLESTATUS WINAPI OleLockServer(LPOLEOBJECT,LHSERVER *);
246  OLESTATUS WINAPI OleUnlockServer(LHSERVER);
247
248  typedef struct _OLESERVERDOC *LPOLESERVERDOC;
249
250  OLESTATUS WINAPI OleRegisterServerDoc(LHSERVER,LPCSTR,LPOLESERVERDOC,LHSERVERDOC *);
251  OLESTATUS WINAPI OleRevokeServerDoc(LHSERVERDOC);
252  OLESTATUS WINAPI OleRenameServerDoc(LHSERVERDOC,LPCSTR);
253  OLESTATUS WINAPI OleRevertServerDoc(LHSERVERDOC);
254  OLESTATUS WINAPI OleSavedServerDoc(LHSERVERDOC);
255
256  typedef struct _OLESERVERVTBL {
257    OLESTATUS (CALLBACK *Open)(LPOLESERVER,LHSERVERDOC,LPCSTR,LPOLESERVERDOC *);
258    OLESTATUS (CALLBACK *Create)(LPOLESERVER,LHSERVERDOC,LPCSTR,LPCSTR,LPOLESERVERDOC *);
259    OLESTATUS (CALLBACK *CreateFromTemplate)(LPOLESERVER,LHSERVERDOC,LPCSTR,LPCSTR,LPCSTR,LPOLESERVERDOC *);
260    OLESTATUS (CALLBACK *Edit)(LPOLESERVER,LHSERVERDOC,LPCSTR,LPCSTR,LPOLESERVERDOC *);
261    OLESTATUS (CALLBACK *Exit)(LPOLESERVER);
262    OLESTATUS (CALLBACK *Release)(LPOLESERVER);
263    OLESTATUS (CALLBACK *Execute)(LPOLESERVER,HGLOBAL);
264  } OLESERVERVTBL;
265
266  typedef OLESERVERVTBL *LPOLESERVERVTBL;
267
268  typedef struct _OLESERVER {
269    LPOLESERVERVTBL lpvtbl;
270  } OLESERVER;
271
272  typedef struct _OLESERVERDOCVTBL {
273    OLESTATUS (CALLBACK *Save)(LPOLESERVERDOC);
274    OLESTATUS (CALLBACK *Close)(LPOLESERVERDOC);
275    OLESTATUS (CALLBACK *SetHostNames)(LPOLESERVERDOC,LPCSTR,LPCSTR);
276    OLESTATUS (CALLBACK *SetDocDimensions)(LPOLESERVERDOC,const RECT *);
277    OLESTATUS (CALLBACK *GetObject)(LPOLESERVERDOC,LPCSTR,LPOLEOBJECT *,LPOLECLIENT);
278    OLESTATUS (CALLBACK *Release)(LPOLESERVERDOC);
279    OLESTATUS (CALLBACK *SetColorScheme)(LPOLESERVERDOC,const LOGPALETTE *);
280    OLESTATUS (CALLBACK *Execute)(LPOLESERVERDOC,HGLOBAL);
281  } OLESERVERDOCVTBL;
282
283  typedef OLESERVERDOCVTBL *LPOLESERVERDOCVTBL;
284
285  typedef struct _OLESERVERDOC {
286    LPOLESERVERDOCVTBL lpvtbl;
287  } OLESERVERDOC;
288
289#ifdef __cplusplus
290}
291#endif
292
293#endif /* _OLE_H_ */
294