home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 7 / 07.iso / c / c083 / 14.ddi / GENINC.PAK / OLE.H < prev    next >
Encoding:
C/C++ Source or Header  |  1993-12-02  |  49.2 KB  |  994 lines

  1. /*****************************************************************************\
  2. *                                                                             *
  3. * ole.h -       Object Linking and Embedding functions, types, and definitions*
  4. *                                                                             *
  5. *               Version 1.0                                                   *
  6. *                                                                             *
  7. \*****************************************************************************/
  8.  
  9. /*
  10.  *      C/C++ Run Time Library - Version 6.0
  11.  *
  12.  *      Copyright (c) 1987, 1993 by Borland International
  13.  *      All Rights Reserved.
  14.  *
  15.  */
  16.  
  17. #ifndef __OLE_H         /* prevent multiple includes */
  18. #define __OLE_H
  19.  
  20. #ifndef __WINDOWS_H
  21. #include <windows.h>    /* <windows.h> must be included */
  22. #endif  /* __WINDOWS_H */
  23.  
  24. #if defined(WIN16) || defined(__FLAT__)
  25. #ifndef RC_INVOKED
  26. #pragma option -a-      /* Assume byte packing throughout */
  27. #endif  /* !RC_INVOKED */
  28. #endif
  29.  
  30. #ifdef __cplusplus
  31. extern "C" {            /* Assume C declarations for C++ */
  32. #endif  /* __cplusplus */
  33.  
  34. #if !defined(__FLAT__)
  35.  
  36. /* If included with the 3.0 windows.h, define compatible aliases */
  37. #if !defined(WINVER) || (WINVER < 0x030a)
  38. #define WINAPI      FAR PASCAL
  39. #define CALLBACK    FAR PASCAL
  40. #define LPCSTR      LPSTR
  41. #define UINT        WORD
  42. #define LPARAM      LONG
  43. #define WPARAM      WORD
  44. #define LRESULT     LONG
  45. #define HMODULE     HANDLE
  46. #define HINSTANCE   HANDLE
  47. #define HLOCAL      HANDLE
  48. #define HGLOBAL     HANDLE
  49. #endif  /* WIN3.0 */
  50.  
  51. #ifdef STRICT
  52. #define OLE_LPCSTR  LPCSTR
  53. #define OLE_CONST   const
  54. #else   /* STRICT */
  55. #define OLE_LPCSTR  LPSTR
  56. #define OLE_CONST
  57. #endif /* !STRICT */
  58.  
  59.  
  60. /* Object types */
  61. #define OT_LINK             1L
  62. #define OT_EMBEDDED         2L
  63. #define OT_STATIC           3L
  64.  
  65. /* activate verbs */
  66. #define OLEVERB_PRIMARY     0
  67.  
  68. /* target device info structure */
  69. typedef struct _OLETARGETDEVICE
  70. {
  71.     UINT otdDeviceNameOffset;
  72.     UINT otdDriverNameOffset;
  73.     UINT otdPortNameOffset;
  74.     UINT otdExtDevmodeOffset;
  75.     UINT otdExtDevmodeSize;
  76.     UINT otdEnvironmentOffset;
  77.     UINT otdEnvironmentSize;
  78.     BYTE otdData[1];
  79. } OLETARGETDEVICE;
  80. typedef OLETARGETDEVICE FAR* LPOLETARGETDEVICE;
  81.  
  82. /* flags used in some methods */
  83. #define OF_SET              0x0001
  84. #define OF_GET              0x0002
  85. #define OF_HANDLER          0x0004
  86.  
  87. /* return codes for OLE functions */
  88. typedef enum
  89. {
  90.     OLE_OK,                     /* 0   Function operated correctly             */
  91.  
  92.     OLE_WAIT_FOR_RELEASE,       /* 1   Command has been initiated, client      */
  93.                                 /*     must wait for release. keep dispatching */
  94.                                 /*     messages till OLE_RELESE in callback    */
  95.  
  96.     OLE_BUSY,                   /* 2   Tried to execute a method while another */
  97.                                 /*     method is in progress.                  */
  98.  
  99.     OLE_ERROR_PROTECT_ONLY,     /* 3   Ole APIs are called in real mode        */
  100.     OLE_ERROR_MEMORY,           /* 4   Could not alloc or lock memory          */
  101.     OLE_ERROR_STREAM,           /* 5  (OLESTREAM) stream error                 */
  102.     OLE_ERROR_STATIC,           /* 6   Non static object expected              */
  103.     OLE_ERROR_BLANK,            /* 7   Critical data missing                   */
  104.     OLE_ERROR_DRAW,             /* 8   Error while drawing                     */
  105.     OLE_ERROR_METAFILE,         /* 9   Invalid metafile                        */
  106.     OLE_ERROR_ABORT,            /* 10  Client chose to abort metafile drawing  */
  107.     OLE_ERROR_CLIPBOARD,        /* 11  Failed to get/set clipboard data        */
  108.     OLE_ERROR_FORMAT,           /* 12  Requested format is not available       */
  109.     OLE_ERROR_OBJECT,           /* 13  Not a valid object                      */
  110.     OLE_ERROR_OPTION,           /* 14  Invalid option(link update / render)    */
  111.     OLE_ERROR_PROTOCOL,         /* 15  Invalid protocol                        */
  112.     OLE_ERROR_ADDRESS,          /* 16  One of the pointers is invalid          */
  113.     OLE_ERROR_NOT_EQUAL,        /* 17  Objects are not equal                   */
  114.     OLE_ERROR_HANDLE,           /* 18  Invalid handle encountered              */
  115.     OLE_ERROR_GENERIC,          /* 19  Some general error                      */
  116.     OLE_ERROR_CLASS,            /* 20  Invalid class                           */
  117.     OLE_ERROR_SYNTAX,           /* 21  Command syntax is invalid               */
  118.     OLE_ERROR_DATATYPE,         /* 22  Data format is not supported            */
  119.     OLE_ERROR_PALETTE,          /* 23  Invalid color palette                   */
  120.     OLE_ERROR_NOT_LINK,         /* 24  Not a linked object                     */
  121.     OLE_ERROR_NOT_EMPTY,        /* 25  Client doc contains objects.            */
  122.     OLE_ERROR_SIZE,             /* 26  Incorrect buffer size passed to the api */
  123.                                 /*     that places some string in caller's     */
  124.                                 /*     buffer                                  */
  125.  
  126.     OLE_ERROR_DRIVE,            /* 27  Drive letter in doc name is invalid     */
  127.     OLE_ERROR_NETWORK,          /* 28  Failed to establish connection to a     */
  128.                                 /*     network share on which the document     */
  129.                                 /*     is located                              */
  130.  
  131.     OLE_ERROR_NAME,             /* 29  Invalid name(doc name, object name),    */
  132.                                 /*     etc.. passed to the APIs                */
  133.  
  134.     OLE_ERROR_TEMPLATE,         /* 30  Server failed to load template          */
  135.     OLE_ERROR_NEW,              /* 31  Server failed to create new doc         */
  136.     OLE_ERROR_EDIT,             /* 32  Server failed to create embedded        */
  137.                                 /*     instance                                */
  138.     OLE_ERROR_OPEN,             /* 33  Server failed to open document,         */
  139.                                 /*     possible invalid link                   */
  140.  
  141.     OLE_ERROR_NOT_OPEN,         /* 34  Object is not open for editing          */
  142.     OLE_ERROR_LAUNCH,           /* 35  Failed to launch server                 */
  143.     OLE_ERROR_COMM,             /* 36  Failed to communicate with server       */
  144.     OLE_ERROR_TERMINATE,        /* 37  Error in termination                    */
  145.     OLE_ERROR_COMMAND,          /* 38  Error in execute                        */
  146.     OLE_ERROR_SHOW,             /* 39  Error in show                           */
  147.     OLE_ERROR_DOVERB,           /* 40  Error in sending do verb, or invalid    */
  148.                                 /*     verb                                    */
  149.     OLE_ERROR_ADVISE_NATIVE,    /* 41  Item could be missing                   */
  150.     OLE_ERROR_ADVISE_PICT,      /* 42  Item could be missing or server doesn't */
  151.                                 /*     this format.                            */
  152.  
  153.     OLE_ERROR_ADVISE_RENAME,    /* 43  Server doesn't support rename           */
  154.     OLE_ERROR_POKE_NATIVE,      /* 44  Failure of poking native data to server */
  155.     OLE_ERROR_REQUEST_NATIVE,   /* 45  Server failed to render native data     */
  156.     OLE_ERROR_REQUEST_PICT,     /* 46  Server failed to render presentation    */
  157.                                 /*     data                                    */
  158.     OLE_ERROR_SERVER_BLOCKED,   /* 47  Trying to block a blocked server or     */
  159.                                 /*     trying to revoke a blocked server       */
  160.                                 /*     or document                             */
  161.  
  162.     OLE_ERROR_REGISTRATION,     /* 48  Server is not registered in regestation */
  163.                                 /*     data base                               */
  164.     OLE_ERROR_ALREADY_REGISTERED,/*49  Trying to register same doc multiple    */
  165.                                  /*    times                                   */
  166.     OLE_ERROR_TASK,             /* 50  Server or client task is invalid        */
  167.     OLE_ERROR_OUTOFDATE,        /* 51  Object is out of date                   */
  168.     OLE_ERROR_CANT_UPDATE_CLIENT,/* 52 Embed doc's client doesn't accept       */
  169.                                 /*     updates                                 */
  170.     OLE_ERROR_UPDATE,           /* 53  erorr while trying to update            */
  171.     OLE_ERROR_SETDATA_FORMAT,   /* 54  Server app doesn't understand the       */
  172.                                 /*     format given to its SetData method      */
  173.     OLE_ERROR_STATIC_FROM_OTHER_OS,/* 55 trying to load a static object created */
  174.                                    /*    on another Operating System           */
  175.  
  176.     /*  Following are warnings */
  177.     OLE_WARN_DELETE_DATA = 1000 /*     Caller must delete the data when he is  */
  178.                                 /*     done with it.                           */
  179. } OLESTATUS;
  180.  
  181.  
  182.  
  183. /* Codes for CallBack events */
  184. typedef enum
  185. {
  186.     OLE_CHANGED,            /* 0                                             */
  187.     OLE_SAVED,              /* 1                                             */
  188.     OLE_CLOSED,             /* 2                                             */
  189.     OLE_RENAMED,            /* 3                                             */
  190.     OLE_QUERY_PAINT,        /* 4  Interruptible paint support                */
  191.     OLE_RELEASE,            /* 5  Object is released(asynchronous operation  */
  192.                             /*    is completed)                              */
  193.     OLE_QUERY_RETRY         /* 6  Query for retry when server sends busy ACK */
  194. } OLE_NOTIFICATION;
  195.  
  196. typedef enum
  197. {
  198.     OLE_NONE,               /* 0  no method active                           */
  199.     OLE_DELETE,             /* 1  object delete                              */
  200.     OLE_LNKPASTE,           /* 2  PasteLink(auto reconnect)                  */
  201.     OLE_EMBPASTE,           /* 3  paste(and update)                          */
  202.     OLE_SHOW,               /* 4  Show                                       */
  203.     OLE_RUN,                /* 5  Run                                        */
  204.     OLE_ACTIVATE,           /* 6  Activate                                   */
  205.     OLE_UPDATE,             /* 7  Update                                     */
  206.     OLE_CLOSE,              /* 8  Close                                      */
  207.     OLE_RECONNECT,          /* 9  Reconnect                                  */
  208.     OLE_SETUPDATEOPTIONS,   /* 10 setting update options                     */
  209.     OLE_SERVERUNLAUNCH,     /* 11 server is being unlaunched                 */
  210.     OLE_LOADFROMSTREAM,     /* 12 LoadFromStream(auto reconnect)             */
  211.     OLE_SETDATA,            /* 13 OleSetData                                 */
  212.     OLE_REQUESTDATA,        /* 14 OleRequestData                             */
  213.     OLE_OTHER,              /* 15 other misc async operations                */
  214.     OLE_CREATE,             /* 16 create                                     */
  215.     OLE_CREATEFROMTEMPLATE, /* 17 CreatefromTemplate                         */
  216.     OLE_CREATELINKFROMFILE, /* 18 CreateLinkFromFile                         */
  217.     OLE_COPYFROMLNK,        /* 19 CopyFromLink(auto reconnect)               */
  218.     OLE_CREATEFROMFILE,     /* 20 CreateFromFile                             */
  219.     OLE_CREATEINVISIBLE     /* 21 CreateInvisible                            */
  220. } OLE_RELEASE_METHOD;
  221.  
  222. /* rendering options */
  223. typedef enum
  224. {
  225.     olerender_none,
  226.     olerender_draw,
  227.     olerender_format
  228. } OLEOPT_RENDER;
  229.  
  230. /* standard clipboard format type */
  231. typedef WORD OLECLIPFORMAT;
  232.  
  233. /* Link update options */
  234. typedef enum
  235. {
  236.     oleupdate_always,
  237.     oleupdate_onsave,
  238. #ifndef OLE_INTERNAL
  239.     oleupdate_oncall
  240. #else
  241.     oleupdate_oncall,
  242.     oleupdate_onclose
  243. #endif  /* OLE_INTERNAL */
  244. } OLEOPT_UPDATE;
  245.  
  246. typedef HANDLE  HOBJECT;
  247. typedef LONG    LHSERVER;
  248. typedef LONG    LHCLIENTDOC;
  249. typedef LONG    LHSERVERDOC;
  250.  
  251. typedef struct _OLEOBJECT FAR*  LPOLEOBJECT;
  252. typedef struct _OLESTREAM FAR*  LPOLESTREAM;
  253. typedef struct _OLECLIENT FAR*  LPOLECLIENT;
  254.  
  255.  
  256. #ifndef OLE_INTERNAL
  257. /* object method table definitions. */
  258. typedef struct _OLEOBJECTVTBL
  259. {
  260.     void FAR*      (CALLBACK* QueryProtocol)        (LPOLEOBJECT, OLE_LPCSTR);
  261.     OLESTATUS      (CALLBACK* Release)              (LPOLEOBJECT);
  262.     OLESTATUS      (CALLBACK* Show)                 (LPOLEOBJECT, BOOL);
  263.     OLESTATUS      (CALLBACK* DoVerb)               (LPOLEOBJECT, UINT, BOOL, BOOL);
  264.     OLESTATUS      (CALLBACK* GetData)              (LPOLEOBJECT, OLECLIPFORMAT, HANDLE FAR*);
  265.     OLESTATUS      (CALLBACK* SetData)              (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
  266.     OLESTATUS      (CALLBACK* SetTargetDevice)      (LPOLEOBJECT, HGLOBAL);
  267.     OLESTATUS      (CALLBACK* SetBounds)            (LPOLEOBJECT, OLE_CONST RECT FAR*);
  268.     OLECLIPFORMAT  (CALLBACK* EnumFormats)          (LPOLEOBJECT, OLECLIPFORMAT);
  269.     OLESTATUS      (CALLBACK* SetColorScheme)       (LPOLEOBJECT, OLE_CONST LOGPALETTE FAR*);
  270.     /* Server has to implement only the above methods. */
  271.  
  272. #ifndef SERVERONLY
  273.     /* Extra methods required for client. */
  274.     OLESTATUS      (CALLBACK* Delete)               (LPOLEOBJECT);
  275.     OLESTATUS      (CALLBACK* SetHostNames)         (LPOLEOBJECT, OLE_LPCSTR, OLE_LPCSTR);
  276.     OLESTATUS      (CALLBACK* SaveToStream)         (LPOLEOBJECT, LPOLESTREAM);
  277.     OLESTATUS      (CALLBACK* Clone)                (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT FAR*);
  278.     OLESTATUS      (CALLBACK* CopyFromLink)         (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT FAR*);
  279.     OLESTATUS      (CALLBACK* Equal)                (LPOLEOBJECT, LPOLEOBJECT);
  280.     OLESTATUS      (CALLBACK* CopyToClipboard)      (LPOLEOBJECT);
  281.     OLESTATUS      (CALLBACK* Draw)                 (LPOLEOBJECT, HDC, OLE_CONST RECT FAR*, OLE_CONST RECT FAR*, HDC);
  282.     OLESTATUS      (CALLBACK* Activate)             (LPOLEOBJECT, UINT, BOOL, BOOL, HWND, OLE_CONST RECT FAR*);
  283.     OLESTATUS      (CALLBACK* Execute)              (LPOLEOBJECT, HGLOBAL, UINT);
  284.     OLESTATUS      (CALLBACK* Close)                (LPOLEOBJECT);
  285.     OLESTATUS      (CALLBACK* Update)               (LPOLEOBJECT);
  286.     OLESTATUS      (CALLBACK* Reconnect)            (LPOLEOBJECT);
  287.  
  288.     OLESTATUS      (CALLBACK* ObjectConvert)        (LPOLEOBJECT, OLE_LPCSTR, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT FAR*);
  289.     OLESTATUS      (CALLBACK* GetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE FAR*);
  290.     OLESTATUS      (CALLBACK* SetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE);
  291.  
  292.     OLESTATUS      (CALLBACK* Rename)               (LPOLEOBJECT, OLE_LPCSTR);
  293.     OLESTATUS      (CALLBACK* QueryName)            (LPOLEOBJECT, LPSTR, UINT FAR*);
  294.  
  295.     OLESTATUS      (CALLBACK* QueryType)            (LPOLEOBJECT, LONG FAR*);
  296.     OLESTATUS      (CALLBACK* QueryBounds)          (LPOLEOBJECT, RECT FAR*);
  297.     OLESTATUS      (CALLBACK* QuerySize)            (LPOLEOBJECT, DWORD FAR*);
  298.     OLESTATUS      (CALLBACK* QueryOpen)            (LPOLEOBJECT);
  299.     OLESTATUS      (CALLBACK* QueryOutOfDate)       (LPOLEOBJECT);
  300.  
  301.     OLESTATUS      (CALLBACK* QueryReleaseStatus)   (LPOLEOBJECT);
  302.     OLESTATUS      (CALLBACK* QueryReleaseError)    (LPOLEOBJECT);
  303.     OLE_RELEASE_METHOD (CALLBACK* QueryReleaseMethod)(LPOLEOBJECT);
  304.  
  305.     OLESTATUS      (CALLBACK* RequestData)          (LPOLEOBJECT, OLECLIPFORMAT);
  306.     OLESTATUS      (CALLBACK* ObjectLong)           (LPOLEOBJECT, UINT, LONG FAR*);
  307.  
  308. /* This method is internal only */
  309.     OLESTATUS      (CALLBACK* ChangeData)           (LPOLEOBJECT, HANDLE, LPOLECLIENT, BOOL);
  310. #endif  /* !SERVERONLY */
  311. } OLEOBJECTVTBL;
  312. typedef  OLEOBJECTVTBL FAR* LPOLEOBJECTVTBL;
  313.  
  314. typedef struct _OLEOBJECT
  315. {
  316.     LPOLEOBJECTVTBL    lpvtbl;
  317. } OLEOBJECT;
  318. #endif  /* !OLE_NTERNAL */
  319.  
  320. /* ole client definitions */
  321. typedef struct _OLECLIENTVTBL
  322. {
  323.     int (CALLBACK* CallBack)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
  324. } OLECLIENTVTBL;
  325.  
  326. typedef  OLECLIENTVTBL FAR*  LPOLECLIENTVTBL;
  327.  
  328. typedef struct _OLECLIENT
  329. {
  330.     LPOLECLIENTVTBL   lpvtbl;
  331. } OLECLIENT;
  332.  
  333. /* Stream definitions */
  334. typedef struct _OLESTREAMVTBL
  335. {
  336.     DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
  337.     DWORD (CALLBACK* Put)(LPOLESTREAM, OLE_CONST void FAR*, DWORD);
  338. } OLESTREAMVTBL;
  339. typedef  OLESTREAMVTBL FAR*  LPOLESTREAMVTBL;
  340.  
  341. typedef struct _OLESTREAM
  342. {
  343.     LPOLESTREAMVTBL      lpstbl;
  344. } OLESTREAM;
  345.  
  346. /* Public Function Prototypes */
  347. OLESTATUS   WINAPI  OleDelete(LPOLEOBJECT);
  348. OLESTATUS   WINAPI  OleRelease(LPOLEOBJECT);
  349. OLESTATUS   WINAPI  OleSaveToStream(LPOLEOBJECT, LPOLESTREAM);
  350. OLESTATUS   WINAPI  OleEqual(LPOLEOBJECT, LPOLEOBJECT );
  351. OLESTATUS   WINAPI  OleCopyToClipboard(LPOLEOBJECT);
  352. OLESTATUS   WINAPI  OleSetHostNames(LPOLEOBJECT, LPCSTR, LPCSTR);
  353. OLESTATUS   WINAPI  OleSetTargetDevice(LPOLEOBJECT, HGLOBAL);
  354. OLESTATUS   WINAPI  OleSetBounds(LPOLEOBJECT, const RECT FAR*);
  355. OLESTATUS   WINAPI  OleSetColorScheme(LPOLEOBJECT, const LOGPALETTE FAR*);
  356. OLESTATUS   WINAPI  OleQueryBounds(LPOLEOBJECT, RECT FAR*);
  357. OLESTATUS   WINAPI  OleQuerySize(LPOLEOBJECT, DWORD FAR*);
  358. OLESTATUS   WINAPI  OleDraw(LPOLEOBJECT, HDC, const RECT FAR*, const RECT FAR*, HDC);
  359. OLESTATUS   WINAPI  OleQueryOpen(LPOLEOBJECT);
  360. OLESTATUS   WINAPI  OleActivate(LPOLEOBJECT, UINT, BOOL, BOOL, HWND, const RECT FAR*);
  361. OLESTATUS   WINAPI  OleExecute(LPOLEOBJECT, HGLOBAL, UINT);
  362. OLESTATUS   WINAPI  OleClose(LPOLEOBJECT);
  363. OLESTATUS   WINAPI  OleUpdate(LPOLEOBJECT);
  364. OLESTATUS   WINAPI  OleReconnect(LPOLEOBJECT);
  365. OLESTATUS   WINAPI  OleGetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE FAR*);
  366. OLESTATUS   WINAPI  OleSetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE);
  367. void FAR*   WINAPI  OleQueryProtocol(LPOLEOBJECT, LPCSTR);
  368.  
  369. /* Routines related to asynchronous operations. */
  370. OLESTATUS   WINAPI  OleQueryReleaseStatus(LPOLEOBJECT);
  371. OLESTATUS   WINAPI  OleQueryReleaseError(LPOLEOBJECT);
  372. OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod(LPOLEOBJECT);
  373.  
  374. OLESTATUS   WINAPI  OleQueryType(LPOLEOBJECT, LONG FAR*);
  375.  
  376. /* LOWORD is major version, HIWORD is minor version */
  377. DWORD       WINAPI  OleQueryClientVersion(void);
  378. DWORD       WINAPI  OleQueryServerVersion(void);
  379.  
  380. /* Converting to format (as in clipboard): */
  381. OLECLIPFORMAT  WINAPI  OleEnumFormats(LPOLEOBJECT, OLECLIPFORMAT);
  382. OLESTATUS   WINAPI  OleGetData(LPOLEOBJECT, OLECLIPFORMAT, HANDLE FAR*);
  383. OLESTATUS   WINAPI  OleSetData(LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
  384. OLESTATUS   WINAPI  OleQueryOutOfDate(LPOLEOBJECT);
  385. OLESTATUS   WINAPI  OleRequestData(LPOLEOBJECT, OLECLIPFORMAT);
  386.  
  387. /* Query apis for creation from clipboard */
  388. OLESTATUS   WINAPI  OleQueryLinkFromClip(LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
  389. OLESTATUS   WINAPI  OleQueryCreateFromClip(LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
  390.  
  391. /* Object creation functions */
  392. OLESTATUS   WINAPI  OleCreateFromClip(LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR,  LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  393. OLESTATUS   WINAPI  OleCreateLinkFromClip(LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  394. OLESTATUS   WINAPI  OleCreateFromFile(LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  395. OLESTATUS   WINAPI  OleCreateLinkFromFile(LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  396. OLESTATUS   WINAPI  OleLoadFromStream(LPOLESTREAM, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  397. OLESTATUS   WINAPI  OleCreate(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  398. OLESTATUS   WINAPI  OleCreateInvisible(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT, BOOL);
  399. OLESTATUS   WINAPI  OleCreateFromTemplate(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  400. OLESTATUS   WINAPI  OleClone(LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  401. OLESTATUS   WINAPI  OleCopyFromLink(LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  402. OLESTATUS   WINAPI  OleObjectConvert(LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  403. OLESTATUS   WINAPI  OleRename(LPOLEOBJECT, LPCSTR);
  404. OLESTATUS   WINAPI  OleQueryName(LPOLEOBJECT, LPSTR, UINT FAR*);
  405. OLESTATUS   WINAPI  OleRevokeObject(LPOLECLIENT);
  406. BOOL        WINAPI  OleIsDcMeta(HDC);
  407.  
  408. /* client document API */
  409. OLESTATUS   WINAPI  OleRegisterClientDoc(LPCSTR, LPCSTR, LONG, LHCLIENTDOC FAR*);
  410. OLESTATUS   WINAPI  OleRevokeClientDoc(LHCLIENTDOC);
  411. OLESTATUS   WINAPI  OleRenameClientDoc(LHCLIENTDOC, LPCSTR);
  412. OLESTATUS   WINAPI  OleRevertClientDoc(LHCLIENTDOC);
  413. OLESTATUS   WINAPI  OleSavedClientDoc(LHCLIENTDOC);
  414. OLESTATUS   WINAPI  OleEnumObjects(LHCLIENTDOC, LPOLEOBJECT FAR*);
  415.  
  416. /* server usage definitions */
  417. typedef enum {
  418.     OLE_SERVER_MULTI,           /* multiple instances */
  419.     OLE_SERVER_SINGLE           /* single instance(multiple document) */
  420. } OLE_SERVER_USE;
  421.  
  422. /* Server API */
  423. typedef struct _OLESERVER FAR*  LPOLESERVER;
  424.  
  425. OLESTATUS   WINAPI  OleRegisterServer(LPCSTR, LPOLESERVER, LHSERVER FAR*, HINSTANCE, OLE_SERVER_USE);
  426. OLESTATUS   WINAPI  OleRevokeServer(LHSERVER);
  427. OLESTATUS   WINAPI  OleBlockServer(LHSERVER);
  428. OLESTATUS   WINAPI  OleUnblockServer(LHSERVER, BOOL FAR*);
  429.  
  430. /* APIs to keep server open */
  431. OLESTATUS   WINAPI  OleLockServer(LPOLEOBJECT, LHSERVER FAR*);
  432. OLESTATUS   WINAPI  OleUnlockServer(LHSERVER);
  433.  
  434. /* Server document API */
  435.  
  436. typedef struct _OLESERVERDOC FAR*  LPOLESERVERDOC;
  437.  
  438. OLESTATUS   WINAPI  OleRegisterServerDoc(LHSERVER, LPCSTR, LPOLESERVERDOC, LHSERVERDOC FAR*);
  439. OLESTATUS   WINAPI  OleRevokeServerDoc(LHSERVERDOC);
  440. OLESTATUS   WINAPI  OleRenameServerDoc(LHSERVERDOC, LPCSTR);
  441. OLESTATUS   WINAPI  OleRevertServerDoc(LHSERVERDOC);
  442. OLESTATUS   WINAPI  OleSavedServerDoc(LHSERVERDOC);
  443.  
  444. typedef struct _OLESERVERVTBL
  445. {
  446.     OLESTATUS (CALLBACK* Open)  (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  447.                                     /* long handle to doc(privtate to DLL)  */
  448.                                     /* lp to OLESERVER                      */
  449.                                     /* document name                        */
  450.                                     /* place holder for returning oledoc.   */
  451.  
  452.     OLESTATUS (CALLBACK* Create)(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  453.                                     /* long handle to doc(privtate to DLL)  */
  454.                                     /* lp to OLESERVER                      */
  455.                                     /* lp class name                        */
  456.                                     /* lp doc name                          */
  457.                                     /* place holder for returning oledoc.   */
  458.  
  459.     OLESTATUS (CALLBACK* CreateFromTemplate)(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  460.                                     /* long handle to doc(privtate to DLL)  */
  461.                                     /* lp to OLESERVER                      */
  462.                                     /* lp class name                        */
  463.                                     /* lp doc name                          */
  464.                                     /* lp template name                     */
  465.                                     /* place holder for returning oledoc.   */
  466.  
  467.     OLESTATUS (CALLBACK* Edit)  (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  468.                                     /* long handle to doc(privtate to DLL)  */
  469.                                     /* lp to OLESERVER                      */
  470.                                     /* lp class name                        */
  471.                                     /* lp doc name                          */
  472.                                     /* place holder for returning oledoc.   */
  473.  
  474.     OLESTATUS (CALLBACK* Exit)  (LPOLESERVER);
  475.                                     /* lp OLESERVER                         */
  476.  
  477.     OLESTATUS (CALLBACK* Release)  (LPOLESERVER);
  478.                                     /* lp OLESERVER                         */
  479.  
  480.     OLESTATUS (CALLBACK* Execute)(LPOLESERVER, HGLOBAL);
  481.                                     /* lp OLESERVER                         */
  482.                                     /* handle to command strings            */
  483. } OLESERVERVTBL;
  484. typedef  OLESERVERVTBL FAR*  LPOLESERVERVTBL;
  485.  
  486. typedef struct _OLESERVER
  487. {
  488.     LPOLESERVERVTBL    lpvtbl;
  489. } OLESERVER;
  490.  
  491. typedef struct _OLESERVERDOCVTBL
  492. {
  493.     OLESTATUS (CALLBACK* Save)      (LPOLESERVERDOC);
  494.     OLESTATUS (CALLBACK* Close)     (LPOLESERVERDOC);
  495.     OLESTATUS (CALLBACK* SetHostNames)(LPOLESERVERDOC, OLE_LPCSTR, OLE_LPCSTR);
  496.     OLESTATUS (CALLBACK* SetDocDimensions)(LPOLESERVERDOC, OLE_CONST RECT FAR*);
  497.     OLESTATUS (CALLBACK* GetObject) (LPOLESERVERDOC, OLE_LPCSTR, LPOLEOBJECT FAR*, LPOLECLIENT);
  498.     OLESTATUS (CALLBACK* Release)   (LPOLESERVERDOC);
  499.     OLESTATUS (CALLBACK* SetColorScheme)(LPOLESERVERDOC, OLE_CONST LOGPALETTE FAR*);
  500.     OLESTATUS (CALLBACK* Execute)  (LPOLESERVERDOC, HGLOBAL);
  501. } OLESERVERDOCVTBL;
  502. typedef  OLESERVERDOCVTBL FAR*  LPOLESERVERDOCVTBL;
  503.  
  504. typedef struct _OLESERVERDOC
  505. {
  506.     LPOLESERVERDOCVTBL lpvtbl;
  507. } OLESERVERDOC;
  508.  
  509. #else    /* defined __FLAT__ */
  510.  
  511. #ifndef WINAPI          /* If not included with 3.1 headers... */
  512. #define WINAPI      FAR PASCAL
  513. #define CALLBACK    FAR PASCAL
  514. #define LPCSTR      LPSTR
  515. #define LRESULT     LONG
  516. #define HGLOBAL     HANDLE
  517. #endif  /* _INC_WINDOWS */
  518.  
  519.  
  520. #ifdef STRICT
  521. #define OLE_LPCSTR  LPCSTR
  522. #define OLE_CONST   const
  523. #else   /* STRICT */
  524. #define OLE_LPCSTR  LPSTR
  525. #define OLE_CONST
  526. #endif /* !STRICT */
  527.  
  528. #define LRESULT     LONG
  529. #define HGLOBAL     HANDLE
  530.  
  531.  
  532. /* Object types */
  533. #define OT_LINK             1L
  534. #define OT_EMBEDDED         2L
  535. #define OT_STATIC           3L
  536.  
  537. /* activate verbs */
  538. #define OLEVERB_PRIMARY     0
  539.  
  540. /* target device info structure */
  541. typedef struct _OLETARGETDEVICE
  542. {
  543.     UINT otdDeviceNameOffset;
  544.     UINT otdDriverNameOffset;
  545.     UINT otdPortNameOffset;
  546.     UINT otdExtDevmodeOffset;
  547.     UINT otdExtDevmodeSize;
  548.     UINT otdEnvironmentOffset;
  549.     UINT otdEnvironmentSize;
  550.     BYTE otdData[1];
  551. } OLETARGETDEVICE;
  552. typedef OLETARGETDEVICE FAR* LPOLETARGETDEVICE;
  553.  
  554. /* flags used in some methods */
  555. #define OF_SET              0x0001
  556. #define OF_GET              0x0002
  557. #define OF_HANDLER          0x0004
  558.  
  559. /* return codes for OLE functions */
  560. typedef enum
  561. {
  562.     OLE_OK,                     /* 0   Function operated correctly             */
  563.  
  564.     OLE_WAIT_FOR_RELEASE,       /* 1   Command has been initiated, client      */
  565.                                 /*     must wait for release. keep dispatching */
  566.                                 /*     messages till OLE_RELESE in callback    */
  567.  
  568.     OLE_BUSY,                   /* 2   Tried to execute a method while another */
  569.                                 /*     method is in progress.                  */
  570.  
  571.     OLE_ERROR_PROTECT_ONLY,     /* 3   Ole APIs are called in real mode        */
  572.     OLE_ERROR_MEMORY,           /* 4   Could not alloc or lock memory          */
  573.     OLE_ERROR_STREAM,           /* 5  (OLESTREAM) stream error                 */
  574.     OLE_ERROR_STATIC,           /* 6   Non static object expected              */
  575.     OLE_ERROR_BLANK,            /* 7   Critical data missing                   */
  576.     OLE_ERROR_DRAW,             /* 8   Error while drawing                     */
  577.     OLE_ERROR_METAFILE,         /* 9   Invalid metafile                        */
  578.     OLE_ERROR_ABORT,            /* 10  Client chose to abort metafile drawing  */
  579.     OLE_ERROR_CLIPBOARD,        /* 11  Failed to get/set clipboard data        */
  580.     OLE_ERROR_FORMAT,           /* 12  Requested format is not available       */
  581.     OLE_ERROR_OBJECT,           /* 13  Not a valid object                      */
  582.     OLE_ERROR_OPTION,           /* 14  Invalid option(link update / render)    */
  583.     OLE_ERROR_PROTOCOL,         /* 15  Invalid protocol                        */
  584.     OLE_ERROR_ADDRESS,          /* 16  One of the pointers is invalid          */
  585.     OLE_ERROR_NOT_EQUAL,        /* 17  Objects are not equal                   */
  586.     OLE_ERROR_HANDLE,           /* 18  Invalid handle encountered              */
  587.     OLE_ERROR_GENERIC,          /* 19  Some general error                      */
  588.     OLE_ERROR_CLASS,            /* 20  Invalid class                           */
  589.     OLE_ERROR_SYNTAX,           /* 21  Command syntax is invalid               */
  590.     OLE_ERROR_DATATYPE,         /* 22  Data format is not supported            */
  591.     OLE_ERROR_PALETTE,          /* 23  Invalid color palette                   */
  592.     OLE_ERROR_NOT_LINK,         /* 24  Not a linked object                     */
  593.     OLE_ERROR_NOT_EMPTY,        /* 25  Client doc contains objects.            */
  594.     OLE_ERROR_SIZE,             /* 26  Incorrect buffer size passed to the api */
  595.                                 /*     that places some string in caller's     */
  596.                                 /*     buffer                                  */
  597.  
  598.     OLE_ERROR_DRIVE,            /* 27  Drive letter in doc name is invalid     */
  599.     OLE_ERROR_NETWORK,          /* 28  Failed to establish connection to a     */
  600.                                 /*     network share on which the document     */
  601.                                 /*     is located                              */
  602.  
  603.     OLE_ERROR_NAME,             /* 29  Invalid name(doc name, object name),    */
  604.                                 /*     etc.. passed to the APIs                */
  605.  
  606.     OLE_ERROR_TEMPLATE,         /* 30  Server failed to load template          */
  607.     OLE_ERROR_NEW,              /* 31  Server failed to create new doc         */
  608.     OLE_ERROR_EDIT,             /* 32  Server failed to create embedded        */
  609.                                 /*     instance                                */
  610.     OLE_ERROR_OPEN,             /* 33  Server failed to open document,         */
  611.                                 /*     possible invalid link                   */
  612.  
  613.     OLE_ERROR_NOT_OPEN,         /* 34  Object is not open for editing          */
  614.     OLE_ERROR_LAUNCH,           /* 35  Failed to launch server                 */
  615.     OLE_ERROR_COMM,             /* 36  Failed to communicate with server       */
  616.     OLE_ERROR_TERMINATE,        /* 37  Error in termination                    */
  617.     OLE_ERROR_COMMAND,          /* 38  Error in execute                        */
  618.     OLE_ERROR_SHOW,             /* 39  Error in show                           */
  619.     OLE_ERROR_DOVERB,           /* 40  Error in sending do verb, or invalid    */
  620.                                 /*     verb                                    */
  621.     OLE_ERROR_ADVISE_NATIVE,    /* 41  Item could be missing                   */
  622.     OLE_ERROR_ADVISE_PICT,      /* 42  Item could be missing or server doesn't */
  623.                                 /*     this format.                            */
  624.  
  625.     OLE_ERROR_ADVISE_RENAME,    /* 43  Server doesn't support rename           */
  626.     OLE_ERROR_POKE_NATIVE,      /* 44  Failure of poking native data to server */
  627.     OLE_ERROR_REQUEST_NATIVE,   /* 45  Server failed to render native data     */
  628.     OLE_ERROR_REQUEST_PICT,     /* 46  Server failed to render presentation    */
  629.                                 /*     data                                    */
  630.     OLE_ERROR_SERVER_BLOCKED,   /* 47  Trying to block a blocked server or     */
  631.                                 /*     trying to revoke a blocked server       */
  632.                                 /*     or document                             */
  633.  
  634.     OLE_ERROR_REGISTRATION,     /* 48  Server is not registered in regestation */
  635.                                 /*     data base                               */
  636.     OLE_ERROR_ALREADY_REGISTERED,/*49  Trying to register same doc multiple    */
  637.                                  /*    times                                   */
  638.     OLE_ERROR_TASK,             /* 50  Server or client task is invalid        */
  639.     OLE_ERROR_OUTOFDATE,        /* 51  Object is out of date                   */
  640.     OLE_ERROR_CANT_UPDATE_CLIENT,/* 52 Embed doc's client doesn't accept       */
  641.                                 /*     updates                                 */
  642.     OLE_ERROR_UPDATE,           /* 53  erorr while trying to update            */
  643.     OLE_ERROR_SETDATA_FORMAT,   /* 54  Server app doesn't understand the       */
  644.                                 /*     format given to its SetData method      */
  645.     OLE_ERROR_STATIC_FROM_OTHER_OS,/* 55 trying to load a static object created */
  646.                                    /*    on another Operating System           */
  647.     OLE_ERROR_FILE_VER,
  648.  
  649.     /*  Following are warnings */
  650.     OLE_WARN_DELETE_DATA = 1000 /*     Caller must delete the data when he is  */
  651.                                 /*     done with it.                           */
  652. } OLESTATUS;
  653.  
  654.  
  655.  
  656. /* Codes for CallBack events */
  657. typedef enum
  658. {
  659.     OLE_CHANGED,            /* 0                                             */
  660.     OLE_SAVED,              /* 1                                             */
  661.     OLE_CLOSED,             /* 2                                             */
  662.     OLE_RENAMED,            /* 3                                             */
  663.     OLE_QUERY_PAINT,        /* 4  Interruptible paint support                */
  664.     OLE_RELEASE,            /* 5  Object is released(asynchronous operation  */
  665.                             /*    is completed)                              */
  666.     OLE_QUERY_RETRY        /* 6  Query for retry when server sends busy ACK */
  667. } OLE_NOTIFICATION;
  668.  
  669. typedef enum
  670. {
  671.     OLE_NONE,               /* 0  no method active                           */
  672.     OLE_DELETE,             /* 1  object delete                              */
  673.     OLE_LNKPASTE,           /* 2  PasteLink(auto reconnect)                  */
  674.     OLE_EMBPASTE,           /* 3  paste(and update)                          */
  675.     OLE_SHOW,               /* 4  Show                                       */
  676.     OLE_RUN,                /* 5  Run                                        */
  677.     OLE_ACTIVATE,           /* 6  Activate                                   */
  678.     OLE_UPDATE,             /* 7  Update                                     */
  679.     OLE_CLOSE,              /* 8  Close                                      */
  680.     OLE_RECONNECT,          /* 9  Reconnect                                  */
  681.     OLE_SETUPDATEOPTIONS,   /* 10 setting update options                     */
  682.     OLE_SERVERUNLAUNCH,     /* 11 server is being unlaunched                 */
  683.     OLE_LOADFROMSTREAM,     /* 12 LoadFromStream(auto reconnect)             */
  684.     OLE_SETDATA,            /* 13 OleSetData                                 */
  685.     OLE_REQUESTDATA,        /* 14 OleRequestData                             */
  686.     OLE_OTHER,              /* 15 other misc async operations                */
  687.     OLE_CREATE,             /* 16 create                                     */
  688.     OLE_CREATEFROMTEMPLATE, /* 17 CreatefromTemplate                         */
  689.     OLE_CREATELINKFROMFILE, /* 18 CreateLinkFromFile                         */
  690.     OLE_COPYFROMLNK,        /* 19 CopyFromLink(auto reconnect)               */
  691.     OLE_CREATEFROMFILE,     /* 20 CreateFromFile                             */
  692.     OLE_CREATEINVISIBLE     /* 21 CreateInvisible                            */
  693. } OLE_RELEASE_METHOD;
  694.  
  695. /* rendering options */
  696. typedef enum
  697. {
  698.     olerender_none,
  699.     olerender_draw,
  700.     olerender_format
  701. } OLEOPT_RENDER;
  702.  
  703. /* standard clipboard format type */
  704. typedef WORD OLECLIPFORMAT;
  705.  
  706. /* Link update options */
  707. typedef enum
  708. {
  709.     oleupdate_always,
  710.     oleupdate_onsave,
  711. #ifdef OLE_INTERNAL
  712.     oleupdate_oncall,
  713.     oleupdate_onclose
  714. #else
  715.     oleupdate_oncall
  716. #endif  /* OLE_INTERNAL */
  717. } OLEOPT_UPDATE;
  718.  
  719. typedef HANDLE  HOBJECT;
  720. typedef LONG    LHSERVER;
  721. typedef LONG    LHCLIENTDOC;
  722. typedef LONG    LHSERVERDOC;
  723.  
  724. typedef struct _OLEOBJECT FAR*  LPOLEOBJECT;
  725. typedef struct _OLESTREAM FAR*  LPOLESTREAM;
  726. typedef struct _OLECLIENT FAR*  LPOLECLIENT;
  727.  
  728.  
  729. /* object method table definitions. */
  730. typedef struct _OLEOBJECTVTBL
  731. {
  732.     void FAR*      (CALLBACK* QueryProtocol)        (LPOLEOBJECT, OLE_LPCSTR);
  733.     OLESTATUS      (CALLBACK* Release)              (LPOLEOBJECT);
  734.     OLESTATUS      (CALLBACK* Show)                 (LPOLEOBJECT, BOOL);
  735.     OLESTATUS      (CALLBACK* DoVerb)               (LPOLEOBJECT, UINT, BOOL, BOOL);
  736.     OLESTATUS      (CALLBACK* GetData)              (LPOLEOBJECT, OLECLIPFORMAT, HANDLE FAR*);
  737.     OLESTATUS      (CALLBACK* SetData)              (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
  738.     OLESTATUS      (CALLBACK* SetTargetDevice)      (LPOLEOBJECT, HGLOBAL);
  739.     OLESTATUS      (CALLBACK* SetBounds)            (LPOLEOBJECT, OLE_CONST RECT FAR*);
  740.     OLECLIPFORMAT  (CALLBACK* EnumFormats)          (LPOLEOBJECT, OLECLIPFORMAT);
  741.     OLESTATUS      (CALLBACK* SetColorScheme)       (LPOLEOBJECT, OLE_CONST LOGPALETTE FAR*);
  742.     /* Server has to implement only the above methods. */
  743.  
  744. #ifndef SERVERONLY
  745.     /* Extra methods required for client. */
  746.     OLESTATUS      (CALLBACK* Delete)               (LPOLEOBJECT);
  747.     OLESTATUS      (CALLBACK* SetHostNames)         (LPOLEOBJECT, OLE_LPCSTR, OLE_LPCSTR);
  748.     OLESTATUS      (CALLBACK* SaveToStream)         (LPOLEOBJECT, LPOLESTREAM);
  749.     OLESTATUS      (CALLBACK* Clone)                (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT FAR*);
  750.     OLESTATUS      (CALLBACK* CopyFromLink)         (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT FAR*);
  751.     OLESTATUS      (CALLBACK* Equal)                (LPOLEOBJECT, LPOLEOBJECT);
  752.     OLESTATUS      (CALLBACK* CopyToClipboard)      (LPOLEOBJECT);
  753.     OLESTATUS      (CALLBACK* Draw)                 (LPOLEOBJECT, HDC, OLE_CONST RECT FAR*, OLE_CONST RECT FAR*, HDC);
  754.     OLESTATUS      (CALLBACK* Activate)             (LPOLEOBJECT, UINT, BOOL, BOOL, HWND, OLE_CONST RECT FAR*);
  755.     OLESTATUS      (CALLBACK* Execute)              (LPOLEOBJECT, HGLOBAL, UINT);
  756.     OLESTATUS      (CALLBACK* Close)                (LPOLEOBJECT);
  757.     OLESTATUS      (CALLBACK* Update)               (LPOLEOBJECT);
  758.     OLESTATUS      (CALLBACK* Reconnect)            (LPOLEOBJECT);
  759.  
  760.     OLESTATUS      (CALLBACK* ObjectConvert)        (LPOLEOBJECT, OLE_LPCSTR, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, LPOLEOBJECT FAR*);
  761.     OLESTATUS      (CALLBACK* GetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE FAR*);
  762.     OLESTATUS      (CALLBACK* SetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE);
  763.  
  764.     OLESTATUS      (CALLBACK* Rename)               (LPOLEOBJECT, OLE_LPCSTR);
  765.     OLESTATUS      (CALLBACK* QueryName)            (LPOLEOBJECT, LPSTR, UINT FAR*);
  766.  
  767.     OLESTATUS      (CALLBACK* QueryType)            (LPOLEOBJECT, LONG FAR*);
  768.     OLESTATUS      (CALLBACK* QueryBounds)          (LPOLEOBJECT, RECT FAR*);
  769.     OLESTATUS      (CALLBACK* QuerySize)            (LPOLEOBJECT, DWORD FAR*);
  770.     OLESTATUS      (CALLBACK* QueryOpen)            (LPOLEOBJECT);
  771.     OLESTATUS      (CALLBACK* QueryOutOfDate)       (LPOLEOBJECT);
  772.  
  773.     OLESTATUS      (CALLBACK* QueryReleaseStatus)   (LPOLEOBJECT);
  774.     OLESTATUS      (CALLBACK* QueryReleaseError)    (LPOLEOBJECT);
  775.     OLE_RELEASE_METHOD (CALLBACK* QueryReleaseMethod)(LPOLEOBJECT);
  776.  
  777.     OLESTATUS      (CALLBACK* RequestData)          (LPOLEOBJECT, OLECLIPFORMAT);
  778.     OLESTATUS      (CALLBACK* ObjectLong)           (LPOLEOBJECT, UINT, LONG FAR*);
  779.  
  780. /* This method is internal only */
  781.     OLESTATUS      (CALLBACK* ChangeData)           (LPOLEOBJECT, HANDLE, LPOLECLIENT, BOOL);
  782. #endif  /* !SERVERONLY */
  783. } OLEOBJECTVTBL;
  784. typedef  OLEOBJECTVTBL FAR* LPOLEOBJECTVTBL;
  785.  
  786. #ifndef OLE_INTERNAL
  787. typedef struct _OLEOBJECT
  788. {
  789.     LPOLEOBJECTVTBL    lpvtbl;
  790. } OLEOBJECT;
  791. #endif
  792.  
  793. /* ole client definitions */
  794. typedef struct _OLECLIENTVTBL
  795. {
  796.     int (CALLBACK* CallBack)(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
  797. } OLECLIENTVTBL;
  798.  
  799. typedef  OLECLIENTVTBL FAR*  LPOLECLIENTVTBL;
  800.  
  801. typedef struct _OLECLIENT
  802. {
  803.     LPOLECLIENTVTBL   lpvtbl;
  804. } OLECLIENT;
  805.  
  806. /* Stream definitions */
  807. typedef struct _OLESTREAMVTBL
  808. {
  809.     DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
  810.     DWORD (CALLBACK* Put)(LPOLESTREAM, OLE_CONST void FAR*, DWORD);
  811. } OLESTREAMVTBL;
  812. typedef  OLESTREAMVTBL FAR*  LPOLESTREAMVTBL;
  813.  
  814. typedef struct _OLESTREAM
  815. {
  816.     LPOLESTREAMVTBL      lpstbl;
  817. } OLESTREAM;
  818.  
  819. /* Public Function Prototypes */
  820. OLESTATUS   WINAPI  OleDelete(LPOLEOBJECT);
  821. OLESTATUS   WINAPI  OleRelease(LPOLEOBJECT);
  822. OLESTATUS   WINAPI  OleSaveToStream(LPOLEOBJECT, LPOLESTREAM);
  823. OLESTATUS   WINAPI  OleEqual(LPOLEOBJECT, LPOLEOBJECT );
  824. OLESTATUS   WINAPI  OleCopyToClipboard(LPOLEOBJECT);
  825. OLESTATUS   WINAPI  OleSetHostNames(LPOLEOBJECT, LPCSTR, LPCSTR);
  826. OLESTATUS   WINAPI  OleSetTargetDevice(LPOLEOBJECT, HGLOBAL);
  827. OLESTATUS   WINAPI  OleSetBounds(LPOLEOBJECT, const RECT FAR*);
  828. OLESTATUS   WINAPI  OleSetColorScheme(LPOLEOBJECT, const LOGPALETTE FAR*);
  829. OLESTATUS   WINAPI  OleQueryBounds(LPOLEOBJECT, RECT FAR*);
  830. OLESTATUS   WINAPI  OleQuerySize(LPOLEOBJECT, DWORD FAR*);
  831. OLESTATUS   WINAPI  OleDraw(LPOLEOBJECT, HDC, const RECT FAR*, const RECT FAR*, HDC);
  832. OLESTATUS   WINAPI  OleQueryOpen(LPOLEOBJECT);
  833. OLESTATUS   WINAPI  OleActivate(LPOLEOBJECT, UINT, BOOL, BOOL, HWND, const RECT FAR*);
  834. OLESTATUS   WINAPI  OleExecute(LPOLEOBJECT, HGLOBAL, UINT);
  835. OLESTATUS   WINAPI  OleClose(LPOLEOBJECT);
  836. OLESTATUS   WINAPI  OleUpdate(LPOLEOBJECT);
  837. OLESTATUS   WINAPI  OleReconnect(LPOLEOBJECT);
  838. OLESTATUS   WINAPI  OleGetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE FAR*);
  839. OLESTATUS   WINAPI  OleSetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE);
  840. void FAR*   WINAPI  OleQueryProtocol(LPOLEOBJECT, LPCSTR);
  841.  
  842. /* Routines related to asynchronous operations. */
  843. OLESTATUS   WINAPI  OleQueryReleaseStatus(LPOLEOBJECT);
  844. OLESTATUS   WINAPI  OleQueryReleaseError(LPOLEOBJECT);
  845. OLE_RELEASE_METHOD WINAPI OleQueryReleaseMethod(LPOLEOBJECT);
  846.  
  847. OLESTATUS   WINAPI  OleQueryType(LPOLEOBJECT, LONG FAR*);
  848.  
  849. /* LOWORD is major version, HIWORD is minor version */
  850. DWORD       WINAPI  OleQueryClientVersion(void);
  851. DWORD       WINAPI  OleQueryServerVersion(void);
  852.  
  853. /* Converting to format (as in clipboard): */
  854. OLECLIPFORMAT  WINAPI  OleEnumFormats(LPOLEOBJECT, OLECLIPFORMAT);
  855. OLESTATUS   WINAPI  OleGetData(LPOLEOBJECT, OLECLIPFORMAT, HANDLE FAR*);
  856. OLESTATUS   WINAPI  OleSetData(LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
  857. OLESTATUS   WINAPI  OleQueryOutOfDate(LPOLEOBJECT);
  858. OLESTATUS   WINAPI  OleRequestData(LPOLEOBJECT, OLECLIPFORMAT);
  859.  
  860. /* Query apis for creation from clipboard */
  861. OLESTATUS   WINAPI  OleQueryLinkFromClip(LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
  862. OLESTATUS   WINAPI  OleQueryCreateFromClip(LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT);
  863.  
  864. /* Object creation functions */
  865. OLESTATUS   WINAPI  OleCreateFromClip(LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR,  LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  866. OLESTATUS   WINAPI  OleCreateLinkFromClip(LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  867. OLESTATUS   WINAPI  OleCreateFromFile(LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  868. OLESTATUS   WINAPI  OleCreateLinkFromFile(LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  869. OLESTATUS   WINAPI  OleLoadFromStream(LPOLESTREAM, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  870. OLESTATUS   WINAPI  OleCreate(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  871. OLESTATUS   WINAPI  OleCreateInvisible(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT, BOOL);
  872. OLESTATUS   WINAPI  OleCreateFromTemplate(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*, OLEOPT_RENDER, OLECLIPFORMAT);
  873. OLESTATUS   WINAPI  OleClone(LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  874. OLESTATUS   WINAPI  OleCopyFromLink(LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  875. OLESTATUS   WINAPI  OleObjectConvert(LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, LPOLEOBJECT FAR*);
  876. OLESTATUS   WINAPI  OleRename(LPOLEOBJECT, LPCSTR);
  877. OLESTATUS   WINAPI  OleQueryName(LPOLEOBJECT, LPSTR, UINT FAR*);
  878. OLESTATUS   WINAPI  OleRevokeObject(LPOLECLIENT);
  879. BOOL        WINAPI  OleIsDcMeta(HDC);
  880.  
  881. /* client document API */
  882. OLESTATUS   WINAPI  OleRegisterClientDoc(LPCSTR, LPCSTR, LONG, LHCLIENTDOC FAR*);
  883. OLESTATUS   WINAPI  OleRevokeClientDoc(LHCLIENTDOC);
  884. OLESTATUS   WINAPI  OleRenameClientDoc(LHCLIENTDOC, LPCSTR);
  885. OLESTATUS   WINAPI  OleRevertClientDoc(LHCLIENTDOC);
  886. OLESTATUS   WINAPI  OleSavedClientDoc(LHCLIENTDOC);
  887. OLESTATUS   WINAPI  OleEnumObjects(LHCLIENTDOC, LPOLEOBJECT FAR*);
  888.  
  889. /* server usage definitions */
  890. typedef enum {
  891.     OLE_SERVER_MULTI,           /* multiple instances */
  892.     OLE_SERVER_SINGLE           /* single instance(multiple document) */
  893. } OLE_SERVER_USE;
  894.  
  895. /* Server API */
  896. typedef struct _OLESERVER FAR*  LPOLESERVER;
  897.  
  898. OLESTATUS   WINAPI  OleRegisterServer(LPCSTR, LPOLESERVER, LHSERVER FAR*, HINSTANCE, OLE_SERVER_USE);
  899. OLESTATUS   WINAPI  OleRevokeServer(LHSERVER);
  900. OLESTATUS   WINAPI  OleBlockServer(LHSERVER);
  901. OLESTATUS   WINAPI  OleUnblockServer(LHSERVER, BOOL FAR*);
  902.  
  903. /* APIs to keep server open */
  904. OLESTATUS   WINAPI  OleLockServer(LPOLEOBJECT, LHSERVER FAR*);
  905. OLESTATUS   WINAPI  OleUnlockServer(LHSERVER);
  906.  
  907. /* Server document API */
  908.  
  909. typedef struct _OLESERVERDOC FAR*  LPOLESERVERDOC;
  910.  
  911. OLESTATUS   WINAPI  OleRegisterServerDoc(LHSERVER, LPCSTR, LPOLESERVERDOC, LHSERVERDOC FAR*);
  912. OLESTATUS   WINAPI  OleRevokeServerDoc(LHSERVERDOC);
  913. OLESTATUS   WINAPI  OleRenameServerDoc(LHSERVERDOC, LPCSTR);
  914. OLESTATUS   WINAPI  OleRevertServerDoc(LHSERVERDOC);
  915. OLESTATUS   WINAPI  OleSavedServerDoc(LHSERVERDOC);
  916.  
  917. typedef struct _OLESERVERVTBL
  918. {
  919.     OLESTATUS (CALLBACK* Open)  (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  920.                                     /* long handle to doc(privtate to DLL)  */
  921.                                     /* lp to OLESERVER                      */
  922.                                     /* document name                        */
  923.                                     /* place holder for returning oledoc.   */
  924.  
  925.     OLESTATUS (CALLBACK* Create)(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  926.                                     /* long handle to doc(privtate to DLL)  */
  927.                                     /* lp to OLESERVER                      */
  928.                                     /* lp class name                        */
  929.                                     /* lp doc name                          */
  930.                                     /* place holder for returning oledoc.   */
  931.  
  932.     OLESTATUS (CALLBACK* CreateFromTemplate)(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  933.                                     /* long handle to doc(privtate to DLL)  */
  934.                                     /* lp to OLESERVER                      */
  935.                                     /* lp class name                        */
  936.                                     /* lp doc name                          */
  937.                                     /* lp template name                     */
  938.                                     /* place holder for returning oledoc.   */
  939.  
  940.     OLESTATUS (CALLBACK* Edit)  (LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, LPOLESERVERDOC FAR*);
  941.                                     /* long handle to doc(privtate to DLL)  */
  942.                                     /* lp to OLESERVER                      */
  943.                                     /* lp class name                        */
  944.                                     /* lp doc name                          */
  945.                                     /* place holder for returning oledoc.   */
  946.  
  947.     OLESTATUS (CALLBACK* Exit)  (LPOLESERVER);
  948.                                     /* lp OLESERVER                         */
  949.  
  950.     OLESTATUS (CALLBACK* Release)  (LPOLESERVER);
  951.                                     /* lp OLESERVER                         */
  952.  
  953.     OLESTATUS (CALLBACK* Execute)(LPOLESERVER, HGLOBAL);
  954.                                     /* lp OLESERVER                         */
  955.                                     /* handle to command strings            */
  956. } OLESERVERVTBL;
  957. typedef  OLESERVERVTBL FAR*  LPOLESERVERVTBL;
  958.  
  959. typedef struct _OLESERVER
  960. {
  961.     LPOLESERVERVTBL    lpvtbl;
  962. } OLESERVER;
  963.  
  964. typedef struct _OLESERVERDOCVTBL
  965. {
  966.     OLESTATUS (CALLBACK* Save)      (LPOLESERVERDOC);
  967.     OLESTATUS (CALLBACK* Close)     (LPOLESERVERDOC);
  968.     OLESTATUS (CALLBACK* SetHostNames)(LPOLESERVERDOC, OLE_LPCSTR, OLE_LPCSTR);
  969.     OLESTATUS (CALLBACK* SetDocDimensions)(LPOLESERVERDOC, OLE_CONST RECT FAR*);
  970.     OLESTATUS (CALLBACK* GetObject) (LPOLESERVERDOC, OLE_LPCSTR, LPOLEOBJECT FAR*, LPOLECLIENT);
  971.     OLESTATUS (CALLBACK* Release)   (LPOLESERVERDOC);
  972.     OLESTATUS (CALLBACK* SetColorScheme)(LPOLESERVERDOC, OLE_CONST LOGPALETTE FAR*);
  973.     OLESTATUS (CALLBACK* Execute)  (LPOLESERVERDOC, HGLOBAL);
  974. } OLESERVERDOCVTBL;
  975. typedef  OLESERVERDOCVTBL FAR*  LPOLESERVERDOCVTBL;
  976.  
  977. typedef struct _OLESERVERDOC
  978. {
  979.     LPOLESERVERDOCVTBL lpvtbl;
  980. } OLESERVERDOC;
  981.  
  982. #endif  /* __FLAT__ */
  983.  
  984. #ifdef __cplusplus
  985. }
  986. #endif  /* __cplusplus */
  987.  
  988. #ifndef RC_INVOKED
  989. #pragma option -a.      /* Revert to default packing */
  990. #endif  /* !RC_INVOKED */
  991.  
  992. #endif  /* __OLE_H */
  993.  
  994.