Windows NT 4.0 source code leak
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

464 lines
20 KiB

/****************************************************************/
/* */
/* OLE header */
/* (c) Copyright Microsoft Corp. 1990 - All Rights Reserved */
/* */
/****************************************************************/
// Object types
#define OT_LINK 1L
#define OT_EMBEDDED 2L
#define OT_STATIC 3L
// activate verbs
#define OLEVERB_PRIMARY 0
// flags used in some methods
#define OF_SET 0x0001
#define OF_GET 0x0002
#define OF_HANDLER 0x0004
// return codes for OLE functions
typedef enum {
OLE_OK, // 0 Function operated correctly
OLE_WAIT_FOR_RELEASE, // 1 Command has been initiated, client
// must wait for release. keep dispatching
// messages till OLE_RELESE in callback
OLE_BUSY, // 2 Tried to execute a method while another
// method is in progress.
OLE_ERROR_PROTECT_ONLY, // 3 Ole APIs are called in real mode
OLE_ERROR_MEMORY, // 4 Could not alloc or lock memory
OLE_ERROR_STREAM, // 5 (OLESTREAM) stream error
OLE_ERROR_STATIC, // 6 Non static object expected
OLE_ERROR_BLANK, // 7 Critical data missing
OLE_ERROR_DRAW, // 8 Error while drawing
OLE_ERROR_METAFILE, // 9 Invalid metafile
OLE_ERROR_ABORT, // 10 Client chose to abort metafile drawing
OLE_ERROR_CLIPBOARD, // 11 Failed to get/set clipboard data
OLE_ERROR_FORMAT, // 12 Requested format is not available
OLE_ERROR_OBJECT, // 13 Not a valid object
OLE_ERROR_OPTION, // 14 Invalid option (link update / render)
OLE_ERROR_PROTOCOL, // 15 Invalid protocol
OLE_ERROR_ADDRESS, // 16 One of the pointers is invalid
OLE_ERROR_NOT_EQUAL, // 17 Objects are not equal
OLE_ERROR_HANDLE, // 18 Invalid handle encountered
OLE_ERROR_GENERIC, // 19 Some general error
OLE_ERROR_CLASS, // 20 Invalid class
OLE_ERROR_SYNTAX, // 21 Command syntax is invalid
OLE_ERROR_DATATYPE, // 22 Data format is not supported
OLE_ERROR_PALETTE, // 23 Invalid color palette
OLE_ERROR_NOT_LINK, // 24 Not a linked object
OLE_ERROR_NOT_EMPTY, // 25 Client doc contains objects.
OLE_ERROR_SIZE, // 26 Incorrect buffer size passed to the api
// that places some string in caller's
// buffer
OLE_ERROR_DRIVE, // 27 Drive letter in doc name is invalid
OLE_ERROR_NETWORK, // 28 Failed to establish connection to a
// network share on which the document
// is located
OLE_ERROR_NAME, // 29 Invalid name (doc name, object name),
// etc.. passed to the APIs
OLE_ERROR_TEMPLATE, // 30 Server failed to load template
OLE_ERROR_NEW, // 31 Server failed to create new doc
OLE_ERROR_EDIT, // 32 Server failed to create embedded
// instance
OLE_ERROR_OPEN, // 33 Server failed to open document,
// possible invalid link
OLE_ERROR_NOT_OPEN, // 34 Object is not open for editing
OLE_ERROR_LAUNCH, // 35 Failed to launch server
OLE_ERROR_COMM, // 36 Failed to communicate with server
OLE_ERROR_TERMINATE, // 37 Error in termination
OLE_ERROR_COMMAND, // 38 Error in execute
OLE_ERROR_SHOW, // 39 Error in show
OLE_ERROR_DOVERB, // 40 Error in sending do verb, or invalid
// verb
OLE_ERROR_ADVISE_NATIVE, // 41 Item could be missing
OLE_ERROR_ADVISE_PICT, // 42 Item could be missing or server doesn't
// this format.
OLE_ERROR_ADVISE_RENAME, // 43 Server doesn't support rename
OLE_ERROR_POKE_NATIVE, // 44 Failure of poking native data to server
OLE_ERROR_REQUEST_NATIVE, // 45 Server failed to render native data
OLE_ERROR_REQUEST_PICT, // 46 Server failed to render presentation
// data
OLE_ERROR_SERVER_BLOCKED, // 47 Trying to block a blocked server or
// trying to revoke a blocked server
// or document
OLE_ERROR_REGISTRATION, // 48 Server is not registered in regestation
// data base
OLE_ERROR_ALREADY_REGISTERED,//49 Trying to register same doc multiple
// times
OLE_ERROR_TASK, // 50 Server or client task is invalid
OLE_ERROR_OUTOFDATE, // 51 Object is out of date
OLE_ERROR_CANT_UPDATE_CLIENT,// 52 embed doc's client doesn't accept
// updates
OLE_ERROR_UPDATE, // 53 erorr while trying to update
// Following are warnings
OLE_WARN_DELETE_DATA = 1000 // Caller must delete the data when he is
// done with it.
} OLESTATUS;
// Codes for CallBack events
typedef enum {
OLE_CHANGED, // 0
OLE_SAVED, // 1
OLE_CLOSED, // 2
OLE_RENAMED, // 3
OLE_QUERY_PAINT, // 4 Interruptible paint support
OLE_RELEASE, // 5 Object is released (asynchronous operation
// is completed)
OLE_QUERY_RETRY, // 6 Query for retry when server sends busy ACK
} OLE_NOTIFICATION;
typedef enum {
OLE_NONE, // 0 no method active
OLE_DELETE, // 1 object delete
OLE_LNKPASTE, // 2 PasteLink (auto reconnect)
OLE_EMBPASTE, // 3 paste (and update)
OLE_SHOW, // 4 Show
OLE_RUN, // 5 Run
OLE_ACTIVATE, // 6 Activate
OLE_UPDATE, // 7 Update
OLE_CLOSE, // 8 Close
OLE_RECONNECT, // 9 Reconnect
OLE_SETUPDATEOPTIONS, // 10 setting update options
OLE_SERVERUNLAUNCH, // 11 server is being unlaunched
OLE_LOADFROMSTREAM, // 12 LoadFromStream (auto reconnect)
OLE_SETDATA, // 13 OleSetData
OLE_REQUESTDATA, // 14 OleRequestData
OLE_OTHER, // 15 other misc async operations
OLE_CREATE, // 16 create
OLE_CREATEFROMTEMPLATE, // 17 CreatefromTemplate
OLE_CREATELINKFROMFILE, // 18 CreateLinkFromFile
OLE_COPYFROMLNK, // 19 CopyFromLink (auto reconnect)
OLE_CREATEFROMFILE, // 20 CreateFromFile
} OLE_RELEASE_METHOD;
// rendering options
typedef enum { olerender_none, olerender_draw, olerender_format } OLEOPT_RENDER;
typedef UINT OLECLIPFORMAT; // standard clipboard format type
// Link update options
typedef enum { oleupdate_always,
oleupdate_onsave,
oleupdate_oncall,
#ifdef OLE_INTERNAL
oleupdate_onclose
#endif
} OLEOPT_UPDATE;
typedef HANDLE HOBJECT;
typedef LONG LHSERVER;
typedef LONG LHCLIENTDOC;
typedef LONG LHSERVERDOC;
typedef struct _OLEOBJECT FAR * LPOLEOBJECT;
typedef struct _OLESTREAM FAR * LPOLESTREAM;
typedef struct _OLECLIENT FAR * LPOLECLIENT;
#ifndef OLE_INTERNAL
// object method table definitions.
typedef struct _OLEOBJECTVTBL{
LPVOID (FAR PASCAL *QueryProtocol) (LPOLEOBJECT, LPSTR);
OLESTATUS (FAR PASCAL *Release) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *Show) (LPOLEOBJECT, BOOL);
OLESTATUS (FAR PASCAL *DoVerb) (LPOLEOBJECT, UINT, BOOL, BOOL);
OLESTATUS (FAR PASCAL *GetData) (LPOLEOBJECT, OLECLIPFORMAT, LPHANDLE);
OLESTATUS (FAR PASCAL *SetData) (LPOLEOBJECT, OLECLIPFORMAT, HANDLE);
OLESTATUS (FAR PASCAL *SetTargetDevice) (LPOLEOBJECT, HANDLE);
OLESTATUS (FAR PASCAL *SetBounds) (LPOLEOBJECT, LPRECT);
OLECLIPFORMAT (FAR PASCAL *EnumFormats) (LPOLEOBJECT, OLECLIPFORMAT);
OLESTATUS (FAR PASCAL *SetColorScheme) (LPOLEOBJECT, LPLOGPALETTE);
// Server has to implement only the above methods.
#ifndef SERVERONLY
// Extra methods required for client.
OLESTATUS (FAR PASCAL *Delete) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *SetHostNames) (LPOLEOBJECT, LPSTR, LPSTR);
OLESTATUS (FAR PASCAL *SaveToStream) (LPOLEOBJECT, LPOLESTREAM);
OLESTATUS (FAR PASCAL *Clone) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS (FAR PASCAL *CopyFromLink) (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS (FAR PASCAL *Equal) (LPOLEOBJECT, LPOLEOBJECT);
OLESTATUS (FAR PASCAL *CopyToClipboard) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *Draw) (LPOLEOBJECT, HDC, LPRECT, LPRECT, HDC);
OLESTATUS (FAR PASCAL *Activate) (LPOLEOBJECT, UINT, BOOL, BOOL, HWND, LPRECT);
OLESTATUS (FAR PASCAL *Execute) (LPOLEOBJECT, HANDLE, UINT);
OLESTATUS (FAR PASCAL *Close) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *Update) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *Reconnect) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *ObjectConvert) (LPOLEOBJECT, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS (FAR PASCAL *GetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE FAR *);
OLESTATUS (FAR PASCAL *SetLinkUpdateOptions) (LPOLEOBJECT, OLEOPT_UPDATE);
OLESTATUS (FAR PASCAL *Rename) (LPOLEOBJECT, LPSTR);
OLESTATUS (FAR PASCAL *QueryName) (LPOLEOBJECT, LPSTR, UINT FAR *);
OLESTATUS (FAR PASCAL *QueryType) (LPOLEOBJECT, LPLONG);
OLESTATUS (FAR PASCAL *QueryBounds) (LPOLEOBJECT, LPRECT);
OLESTATUS (FAR PASCAL *QuerySize) (LPOLEOBJECT, DWORD FAR *);
OLESTATUS (FAR PASCAL *QueryOpen) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *QueryOutOfDate) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *QueryReleaseStatus) (LPOLEOBJECT);
OLESTATUS (FAR PASCAL *QueryReleaseError) (LPOLEOBJECT);
OLE_RELEASE_METHOD (FAR PASCAL *QueryReleaseMethod)(LPOLEOBJECT);
OLESTATUS (FAR PASCAL *RequestData) (LPOLEOBJECT, OLECLIPFORMAT);
OLESTATUS (FAR PASCAL *ObjectLong) (LPOLEOBJECT, UINT, LPLONG);
// This method is internal only
OLESTATUS (FAR PASCAL *ChangeData) (LPOLEOBJECT, HANDLE, LPOLECLIENT, BOOL);
#endif
} OLEOBJECTVTBL;
typedef OLEOBJECTVTBL FAR *LPOLEOBJECTVTBL;
typedef struct _OLEOBJECT {
LPOLEOBJECTVTBL lpvtbl;
} OLEOBJECT;
#endif
// ole client definitions
typedef struct _OLECLIENTVTBL{
int (pascal far *CallBack) (LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT);
} OLECLIENTVTBL;
typedef OLECLIENTVTBL FAR *LPOLECLIENTVTBL;
typedef struct _OLECLIENT {
LPOLECLIENTVTBL lpvtbl;
} OLECLIENT;
// Stream definitions
typedef struct _OLESTREAMVTBL{
DWORD (pascal far *Get) (LPOLESTREAM, LPSTR, DWORD);
DWORD (pascal far *Put) (LPOLESTREAM, LPSTR, DWORD);
} OLESTREAMVTBL;
typedef OLESTREAMVTBL FAR *LPOLESTREAMVTBL;
typedef struct _OLESTREAM {
LPOLESTREAMVTBL lpstbl;
} OLESTREAM;
// Public Function Prototypes
OLESTATUS FAR PASCAL OleDelete (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleRelease (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleSaveToStream (LPOLEOBJECT, LPOLESTREAM);
OLESTATUS FAR PASCAL OleEqual (LPOLEOBJECT, LPOLEOBJECT );
OLESTATUS FAR PASCAL OleCopyToClipboard (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleSetHostNames (LPOLEOBJECT, LPSTR, LPSTR);
OLESTATUS FAR PASCAL OleSetTargetDevice (LPOLEOBJECT, HANDLE);
OLESTATUS FAR PASCAL OleSetBounds (LPOLEOBJECT, LPRECT);
OLESTATUS FAR PASCAL OleSetColorScheme (LPOLEOBJECT, LPLOGPALETTE);
OLESTATUS FAR PASCAL OleQueryBounds (LPOLEOBJECT, LPRECT);
OLESTATUS FAR PASCAL OleQuerySize (LPOLEOBJECT, DWORD FAR *);
OLESTATUS FAR PASCAL OleDraw (LPOLEOBJECT, HDC, LPRECT, LPRECT, HDC);
OLESTATUS FAR PASCAL OleQueryOpen (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleActivate (LPOLEOBJECT, UINT, BOOL, BOOL, HWND, LPRECT);
OLESTATUS FAR PASCAL OleExecute (LPOLEOBJECT, HANDLE, UINT);
OLESTATUS FAR PASCAL OleClose (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleUpdate (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleReconnect (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleGetLinkUpdateOptions (LPOLEOBJECT, OLEOPT_UPDATE FAR *);
OLESTATUS FAR PASCAL OleSetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE);
LPVOID FAR PASCAL OleQueryProtocol (LPOLEOBJECT, LPSTR);
// Routines related to asynchronous operations.
OLESTATUS FAR PASCAL OleQueryReleaseStatus (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleQueryReleaseError (LPOLEOBJECT);
OLE_RELEASE_METHOD FAR PASCAL OleQueryReleaseMethod (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleQueryType (LPOLEOBJECT, LPLONG);
// LOW WORD is major version, HIWORD is minor version
DWORD FAR PASCAL OleQueryClientVersion (void);
DWORD FAR PASCAL OleQueryServerVersion (void);
// Converting to format (as in clipboard):
OLECLIPFORMAT FAR PASCAL OleEnumFormats (LPOLEOBJECT, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleGetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE FAR *);
OLESTATUS FAR PASCAL OleSetData (LPOLEOBJECT, OLECLIPFORMAT, HANDLE );
OLESTATUS FAR PASCAL OleQueryOutOfDate (LPOLEOBJECT);
OLESTATUS FAR PASCAL OleRequestData (LPOLEOBJECT, OLECLIPFORMAT);
// Query apis for creation from clipboard
OLESTATUS FAR PASCAL OleQueryLinkFromClip (LPSTR, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleQueryCreateFromClip (LPSTR, OLEOPT_RENDER, OLECLIPFORMAT);
// Object creation functions
OLESTATUS FAR PASCAL OleCreateFromClip (LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleCreateLinkFromClip (LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleCreateFromFile (LPSTR, LPOLECLIENT, LPSTR, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleCreateLinkFromFile (LPSTR, LPOLECLIENT, LPSTR, LPSTR, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleLoadFromStream (LPOLESTREAM, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS FAR PASCAL OleCreate (LPSTR, LPOLECLIENT, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleCreateFromTemplate (LPSTR, LPOLECLIENT, LPSTR, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *, OLEOPT_RENDER, OLECLIPFORMAT);
OLESTATUS FAR PASCAL OleClone (LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS FAR PASCAL OleCopyFromLink (LPOLEOBJECT, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS FAR PASCAL OleObjectConvert (LPOLEOBJECT, LPSTR, LPOLECLIENT, LHCLIENTDOC, LPSTR, LPOLEOBJECT FAR *);
OLESTATUS FAR PASCAL OleRename (LPOLEOBJECT, LPSTR);
OLESTATUS FAR PASCAL OleQueryName (LPOLEOBJECT, LPSTR, UINT FAR *);
OLESTATUS FAR PASCAL OleRevokeObject (LPOLECLIENT);
BOOL FAR PASCAL OleIsDcMeta (HDC);
// client document API
OLESTATUS FAR PASCAL OleRegisterClientDoc (LPSTR, LPSTR, LONG, LHCLIENTDOC FAR *);
OLESTATUS FAR PASCAL OleRevokeClientDoc (LHCLIENTDOC);
OLESTATUS FAR PASCAL OleRenameClientDoc (LHCLIENTDOC, LPSTR);
OLESTATUS FAR PASCAL OleRevertClientDoc (LHCLIENTDOC);
OLESTATUS FAR PASCAL OleSavedClientDoc (LHCLIENTDOC);
OLESTATUS FAR PASCAL OleEnumObjects (LHCLIENTDOC, LPOLEOBJECT FAR *);
// server usage definitions
typedef enum {
OLE_SERVER_MULTI, // multiple instances
OLE_SERVER_SINGLE // single instance (multiple document)
} OLE_SERVER_USE;
// Server API
typedef struct _OLESERVER FAR * LPOLESERVER;
OLESTATUS FAR PASCAL OleRegisterServer (LPSTR, LPOLESERVER, LHSERVER FAR *, HANDLE, OLE_SERVER_USE);
OLESTATUS FAR PASCAL OleRevokeServer (LHSERVER);
OLESTATUS FAR PASCAL OleBlockServer (LHSERVER);
OLESTATUS FAR PASCAL OleUnblockServer (LHSERVER, BOOL FAR *);
// APIs to keep server open
OLESTATUS FAR PASCAL OleLockServer (LPOLEOBJECT, LHSERVER FAR *);
OLESTATUS FAR PASCAL OleUnlockServer (LHSERVER);
// Server document API
typedef struct _OLESERVERDOC FAR * LPOLESERVERDOC;
OLESTATUS FAR PASCAL OleRegisterServerDoc (LHSERVER, LPSTR, LPOLESERVERDOC, LHSERVERDOC FAR *);
OLESTATUS FAR PASCAL OleRevokeServerDoc (LHSERVERDOC);
OLESTATUS FAR PASCAL OleRenameServerDoc (LHSERVERDOC, LPSTR);
OLESTATUS FAR PASCAL OleRevertServerDoc (LHSERVERDOC);
OLESTATUS FAR PASCAL OleSavedServerDoc (LHSERVERDOC);
typedef struct _OLESERVERVTBL{
OLESTATUS (FAR PASCAL *Open) (LPOLESERVER, LHSERVERDOC, LPSTR, LPOLESERVERDOC FAR *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// document name
// place holder for returning oledoc.
OLESTATUS (FAR PASCAL *Create) (LPOLESERVER, LHSERVERDOC, LPSTR, LPSTR, LPOLESERVERDOC FAR *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// lp class name
// lp doc name
// place holder for returning oledoc.
OLESTATUS (FAR PASCAL *CreateFromTemplate) (LPOLESERVER, LHSERVERDOC, LPSTR, LPSTR, LPSTR, LPOLESERVERDOC FAR *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// lp class name
// lp doc name
// lp template name
// place holder for returning oledoc.
OLESTATUS (FAR PASCAL *Edit) (LPOLESERVER, LHSERVERDOC, LPSTR, LPSTR, LPOLESERVERDOC FAR *);
// long handle to doc (privtate to DLL)
// lp to OLESERVER
// lp class name
// lp doc name
// place holder for returning oledoc.
OLESTATUS (FAR PASCAL *Exit) (LPOLESERVER);
// lp OLESERVER
OLESTATUS (FAR PASCAL *Release) (LPOLESERVER);
// lp OLESERVER
OLESTATUS (FAR PASCAL *Execute) (LPOLESERVER, HANDLE);
// lp OLESERVER
// handle to command strings
} OLESERVERVTBL;
typedef OLESERVERVTBL FAR *LPOLESERVERVTBL;
typedef struct _OLESERVER {
LPOLESERVERVTBL lpvtbl;
} OLESERVER;
typedef struct _OLEDOCMENTVTBL{
OLESTATUS (FAR PASCAL *Save) (LPOLESERVERDOC);
OLESTATUS (FAR PASCAL *Close) (LPOLESERVERDOC);
OLESTATUS (FAR PASCAL *SetHostNames) (LPOLESERVERDOC, LPSTR, LPSTR);
OLESTATUS (FAR PASCAL *SetDocDimensions) (LPOLESERVERDOC, LPRECT);
OLESTATUS (FAR PASCAL *GetObject) (LPOLESERVERDOC, LPSTR, LPOLEOBJECT FAR *, LPOLECLIENT);
OLESTATUS (FAR PASCAL *Release) (LPOLESERVERDOC);
OLESTATUS (FAR PASCAL *SetColorScheme) (LPOLESERVERDOC, LPLOGPALETTE);
OLESTATUS (FAR PASCAL *Execute) (LPOLESERVERDOC, HANDLE);
} OLESERVERDOCVTBL;
typedef OLESERVERDOCVTBL FAR *LPOLESERVERDOCVTBL;
typedef struct _OLESERVERDOC {
LPOLESERVERDOCVTBL lpvtbl;
} OLESERVERDOC;