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