summaryrefslogtreecommitdiffstats
path: root/private/oleauto/ole/win16
diff options
context:
space:
mode:
Diffstat (limited to 'private/oleauto/ole/win16')
-rw-r--r--private/oleauto/ole/win16/cobjps.h69
-rw-r--r--private/oleauto/ole/win16/coguid.h65
-rw-r--r--private/oleauto/ole/win16/compobj.h1031
-rw-r--r--private/oleauto/ole/win16/dvobj.h480
-rw-r--r--private/oleauto/ole/win16/initguid.h38
-rw-r--r--private/oleauto/ole/win16/moniker.h248
-rw-r--r--private/oleauto/ole/win16/ole1cls.h141
-rw-r--r--private/oleauto/ole/win16/ole2.h1336
-rw-r--r--private/oleauto/ole/win16/ole2.reg460
-rw-r--r--private/oleauto/ole/win16/ole2dbg.h19
-rw-r--r--private/oleauto/ole/win16/ole2ver.h5
-rw-r--r--private/oleauto/ole/win16/oleguid.h80
-rw-r--r--private/oleauto/ole/win16/scode.h283
-rw-r--r--private/oleauto/ole/win16/storage.h457
14 files changed, 4712 insertions, 0 deletions
diff --git a/private/oleauto/ole/win16/cobjps.h b/private/oleauto/ole/win16/cobjps.h
new file mode 100644
index 000000000..ff0359005
--- /dev/null
+++ b/private/oleauto/ole/win16/cobjps.h
@@ -0,0 +1,69 @@
+/*****************************************************************************\
+* *
+* cobjps.h - Definitions for writing standard proxies and stubs *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+#if !defined( _COBJPS_H_ )
+#define _COBJPS_H_
+
+
+/****** IRpcChannel Interface ***********************************************/
+
+interface IRpcChannel : IUnknown
+{
+ STDMETHOD(GetStream)(REFIID iid, int iMethod, BOOL fSend,
+ BOOL fNoWait, DWORD size, IStream FAR* FAR* ppIStream) = 0;
+ STDMETHOD(Call)(IStream FAR* pIStream) = 0;
+ STDMETHOD(GetDestCtx)(DWORD FAR* lpdwDestCtx, LPVOID FAR* lplpvDestCtx) = 0;
+ STDMETHOD(IsConnected)(void) = 0;
+};
+
+
+/****** IRpcProxy Interface *************************************************/
+
+// IRpcProxy is an interface implemented by proxy objects. A proxy object has
+// exactly the same interfaces as the real object in addition to IRpcProxy.
+//
+
+interface IRpcProxy : IUnknown
+{
+ STDMETHOD(Connect)(IRpcChannel FAR* pRpcChannel) = 0;
+ STDMETHOD_(void, Disconnect)(void) = 0;
+};
+
+
+/****** IRpcStub Interface **************************************************/
+
+// IRpcStub is an interface implemented by stub objects.
+//
+
+interface IRpcStub : IUnknown
+{
+ STDMETHOD(Connect)(IUnknown FAR* pUnk) = 0;
+ STDMETHOD_(void, Disconnect)(void) = 0;
+ STDMETHOD(Invoke)(REFIID iid, int iMethod, IStream FAR* pIStream,
+ DWORD dwDestCtx, LPVOID lpvDestCtx) = 0;
+ STDMETHOD_(BOOL, IsIIDSupported)(REFIID iid) = 0;
+ STDMETHOD_(ULONG, CountRefs)(void) = 0;
+};
+
+
+/****** IPSFactory Interface ************************************************/
+
+// IPSFactory - creates proxies and stubs
+//
+
+interface IPSFactory : IUnknown
+{
+ STDMETHOD(CreateProxy)(IUnknown FAR* pUnkOuter, REFIID riid,
+ IRpcProxy FAR* FAR* ppProxy, void FAR* FAR* ppv) = 0;
+ STDMETHOD(CreateStub)(REFIID riid, IUnknown FAR* pUnkServer,
+ IRpcStub FAR* FAR* ppStub) = 0;
+};
+
+#endif // _COBJPS_H_
diff --git a/private/oleauto/ole/win16/coguid.h b/private/oleauto/ole/win16/coguid.h
new file mode 100644
index 000000000..049884168
--- /dev/null
+++ b/private/oleauto/ole/win16/coguid.h
@@ -0,0 +1,65 @@
+/*****************************************************************************\
+* *
+* coguid.h - Master definition of GUIDs for compobj.dll *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+/* this file is the master definition of all GUIDs for the component object
+ model and is included in compobj.h. Some GUIDs for moinkers and storage
+ appear here as well. All of these GUIDs are OLE GUIDs only in the sense
+ that part of the GUID range owned by OLE was used to define them.
+
+ NOTE: The second byte of all of these GUIDs is 0.
+*/
+
+
+DEFINE_GUID(GUID_NULL, 0L, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);
+
+DEFINE_OLEGUID(IID_IUnknown, 0x00000000L, 0, 0);
+DEFINE_OLEGUID(IID_IClassFactory, 0x00000001L, 0, 0);
+DEFINE_OLEGUID(IID_IMalloc, 0x00000002L, 0, 0);
+DEFINE_OLEGUID(IID_IMarshal, 0x00000003L, 0, 0);
+
+/* RPC related interfaces */
+DEFINE_OLEGUID(IID_IRpcChannel, 0x00000004L, 0, 0);
+DEFINE_OLEGUID(IID_IRpcStub, 0x00000005L, 0, 0);
+DEFINE_OLEGUID(IID_IStubManager, 0x00000006L, 0, 0);
+DEFINE_OLEGUID(IID_IRpcProxy, 0x00000007L, 0, 0);
+DEFINE_OLEGUID(IID_IProxyManager, 0x00000008L, 0, 0);
+DEFINE_OLEGUID(IID_IPSFactory, 0x00000009L, 0, 0);
+
+/* storage related interfaces */
+DEFINE_OLEGUID(IID_ILockBytes, 0x0000000aL, 0, 0);
+DEFINE_OLEGUID(IID_IStorage, 0x0000000bL, 0, 0);
+DEFINE_OLEGUID(IID_IStream, 0x0000000cL, 0, 0);
+DEFINE_OLEGUID(IID_IEnumSTATSTG, 0x0000000dL, 0, 0);
+
+/* moniker related interfaces */
+DEFINE_OLEGUID(IID_IBindCtx, 0x0000000eL, 0, 0);
+DEFINE_OLEGUID(IID_IMoniker, 0x0000000fL, 0, 0);
+DEFINE_OLEGUID(IID_IRunningObjectTable, 0x00000010L, 0, 0);
+DEFINE_OLEGUID(IID_IInternalMoniker, 0x00000011L, 0, 0);
+
+/* storage related interfaces */
+DEFINE_OLEGUID(IID_IRootStorage, 0x00000012L, 0, 0);
+DEFINE_OLEGUID(IID_IDfReserved1, 0x00000013L, 0, 0);
+DEFINE_OLEGUID(IID_IDfReserved2, 0x00000014L, 0, 0);
+DEFINE_OLEGUID(IID_IDfReserved3, 0x00000015L, 0, 0);
+
+/* concurrency releated interfaces */
+DEFINE_OLEGUID(IID_IMessageFilter, 0x00000016L, 0, 0);
+
+/* CLSID of standard marshaler */
+DEFINE_OLEGUID(CLSID_StdMarshal, 0x00000017L, 0, 0);
+
+/* interface on server for getting info for std marshaler */
+DEFINE_OLEGUID(IID_IStdMarshalInfo, 0x00000018L, 0, 0);
+
+/* interface to inform object of number of external connections */
+DEFINE_OLEGUID(IID_IExternalConnection, 0x00000019L, 0, 0);
+
+/* NOTE: LSB 0x1a through 0xff are reserved for future use */
diff --git a/private/oleauto/ole/win16/compobj.h b/private/oleauto/ole/win16/compobj.h
new file mode 100644
index 000000000..a438db8e4
--- /dev/null
+++ b/private/oleauto/ole/win16/compobj.h
@@ -0,0 +1,1031 @@
+/*****************************************************************************\
+* *
+* compobj.h - Component object model definitions *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+
+#if !defined( _COMPOBJ_H_ )
+#define _COMPOBJ_H_
+
+/****** Linkage Definitions *************************************************/
+
+/*
+ * These are macros for declaring methods/functions. They exist so that
+ * control over the use of keywords (CDECL, PASCAL, __export,
+ * extern "C") resides in one place, and because this is the least
+ * intrusive way of writing function declarations that do not have
+ * to be modified in order to port to the Mac.
+ *
+ * The macros without the trailing underscore are for functions/methods
+ * which a return value of type HRESULT; this is by far the most common
+ * case in OLE. The macros with a trailing underscore take a return
+ * type as a parameter.
+ *
+ * WARNING: STDAPI is hard coded into the LPFNGETCLASSOBJECT typedef below.
+ */
+
+#ifdef __cplusplus
+ #define EXTERN_C extern "C"
+#else
+ #define EXTERN_C extern
+#endif
+
+#ifdef _MAC
+#define STDMETHODCALLTYPE
+#define STDAPICALLTYPE pascal
+
+#define STDAPI EXTERN_C STDAPICALLTYPE HRESULT
+#define STDAPI_(type) EXTERN_C STDAPICALLTYPE type
+
+#else // !_MAC
+
+#ifdef WIN32
+#define STDMETHODCALLTYPE __export __cdecl
+#define STDAPICALLTYPE __export __stdcall
+
+#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
+
+#else
+#define STDMETHODCALLTYPE __export FAR CDECL
+#define STDAPICALLTYPE __export FAR PASCAL
+
+#define STDAPI EXTERN_C HRESULT STDAPICALLTYPE
+#define STDAPI_(type) EXTERN_C type STDAPICALLTYPE
+
+#endif
+
+#endif //!_MAC
+
+#define STDMETHODIMP HRESULT STDMETHODCALLTYPE
+#define STDMETHODIMP_(type) type STDMETHODCALLTYPE
+
+
+/****** Interface Declaration ***********************************************/
+
+/*
+ * These are macros for declaring interfaces. They exist so that
+ * a single definition of the interface is simulataneously a proper
+ * declaration of the interface structures (C++ abstract classes)
+ * for both C and C++.
+ *
+ * DECLARE_INTERFACE(iface) is used to declare an interface that does
+ * not derive from a base interface.
+ * DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface
+ * that does derive from a base interface.
+ *
+ * By default if the source file has a .c extension the C version of
+ * the interface declaratations will be expanded; if it has a .cpp
+ * extension the C++ version will be expanded. if you want to force
+ * the C version expansion even though the source file has a .cpp
+ * extension, then define the macro "CINTERFACE".
+ * eg. cl -DCINTERFACE file.cpp
+ *
+ * Example Interface declaration:
+ *
+ * #undef INTERFACE
+ * #define INTERFACE IClassFactory
+ *
+ * DECLARE_INTERFACE_(IClassFactory, IUnknown)
+ * {
+ * // *** IUnknown methods ***
+ * STDMETHOD(QueryInterface) (THIS_
+ * REFIID riid,
+ * LPVOID FAR* ppvObj) PURE;
+ * STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ * STDMETHOD_(ULONG,Release) (THIS) PURE;
+ *
+ * // *** IClassFactory methods ***
+ * STDMETHOD(CreateInstance) (THIS_
+ * LPUNKNOWN pUnkOuter,
+ * REFIID riid,
+ * LPVOID FAR* ppvObject) PURE;
+ * };
+ *
+ * Example C++ expansion:
+ *
+ * struct FAR IClassFactory : public IUnknown
+ * {
+ * virtual HRESULT STDMETHODCALLTYPE QueryInterface(
+ * IID FAR& riid,
+ * LPVOID FAR* ppvObj) = 0;
+ * virtual HRESULT STDMETHODCALLTYPE AddRef(void) = 0;
+ * virtual HRESULT STDMETHODCALLTYPE Release(void) = 0;
+ * virtual HRESULT STDMETHODCALLTYPE CreateInstance(
+ * LPUNKNOWN pUnkOuter,
+ * IID FAR& riid,
+ * LPVOID FAR* ppvObject) = 0;
+ * };
+ *
+ * NOTE: Our documentation says '#define interface class' but we use
+ * 'struct' instead of 'class' to keep a lot of 'public:' lines
+ * out of the interfaces. The 'FAR' forces the 'this' pointers to
+ * be far, which is what we need.
+ *
+ * Example C expansion:
+ *
+ * typedef struct IClassFactory
+ * {
+ * const struct IClassFactoryVtbl FAR* lpVtbl;
+ * } IClassFactory;
+ *
+ * typedef struct IClassFactoryVtbl IClassFactoryVtbl;
+ *
+ * struct IClassFactoryVtbl
+ * {
+ * HRESULT (STDMETHODCALLTYPE * QueryInterface) (
+ * IClassFactory FAR* This,
+ * IID FAR* riid,
+ * LPVOID FAR* ppvObj) ;
+ * HRESULT (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ;
+ * HRESULT (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ;
+ * HRESULT (STDMETHODCALLTYPE * CreateInstance) (
+ * IClassFactory FAR* This,
+ * LPUNKNOWN pUnkOuter,
+ * IID FAR* riid,
+ * LPVOID FAR* ppvObject);
+ * HRESULT (STDMETHODCALLTYPE * LockServer) (
+ * IClassFactory FAR* This,
+ * BOOL fLock);
+ * };
+ */
+
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+#ifdef __TURBOC__
+#define interface struct huge
+#else
+#define interface struct FAR
+#endif
+#define STDMETHOD(method) virtual HRESULT STDMETHODCALLTYPE method
+#define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
+#define PURE = 0
+#define THIS_
+#define THIS void
+#define DECLARE_INTERFACE(iface) interface iface
+#define DECLARE_INTERFACE_(iface, baseiface) interface iface : public baseiface
+
+#else
+#define interface struct
+
+#ifdef _MAC
+
+#define STDMETHOD(method) long method##pad;\
+ HRESULT (STDMETHODCALLTYPE * method)
+#define STDMETHOD_(type,method) long method##pad;\
+ type (STDMETHODCALLTYPE * method)
+
+#else // _MAC
+
+#define STDMETHOD(method) HRESULT (STDMETHODCALLTYPE * method)
+#define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
+
+#endif // !_MAC
+
+#define PURE
+#define THIS_ INTERFACE FAR* This,
+#define THIS INTERFACE FAR* This
+#ifdef CONST_VTABLE
+#define DECLARE_INTERFACE(iface) typedef interface iface { \
+ const struct iface##Vtbl FAR* lpVtbl; \
+ } iface; \
+ typedef const struct iface##Vtbl iface##Vtbl; \
+ const struct iface##Vtbl
+#else
+#define DECLARE_INTERFACE(iface) typedef interface iface { \
+ struct iface##Vtbl FAR* lpVtbl; \
+ } iface; \
+ typedef struct iface##Vtbl iface##Vtbl; \
+ struct iface##Vtbl
+#endif
+#define DECLARE_INTERFACE_(iface, baseiface) DECLARE_INTERFACE(iface)
+
+#endif
+
+
+/****** Additional basic types **********************************************/
+
+
+#ifndef FARSTRUCT
+#ifdef __cplusplus
+#define FARSTRUCT FAR
+#else
+#define FARSTRUCT
+#endif // __cplusplus
+#endif // FARSTRUCT
+
+
+#ifndef WINAPI /* If not included with 3.1 headers... */
+
+#ifdef WIN32
+#define FAR
+#define PASCAL __stdcall
+#define CDECL
+#else
+#define FAR _far
+#define PASCAL _pascal
+#define CDECL _cdecl
+#endif
+
+#define VOID void
+#define WINAPI FAR PASCAL
+#define CALLBACK FAR PASCAL
+
+#ifndef FALSE
+#define FALSE 0
+#define TRUE 1
+#endif
+
+typedef int BOOL;
+typedef unsigned char BYTE;
+typedef unsigned short WORD;
+typedef unsigned int UINT;
+
+typedef long LONG;
+typedef unsigned long DWORD;
+
+
+typedef UINT WPARAM;
+typedef LONG LPARAM;
+typedef LONG LRESULT;
+
+typedef unsigned int HANDLE;
+#define DECLARE_HANDLE(name) typedef UINT name
+
+DECLARE_HANDLE(HMODULE);
+DECLARE_HANDLE(HINSTANCE);
+DECLARE_HANDLE(HLOCAL);
+DECLARE_HANDLE(HGLOBAL);
+DECLARE_HANDLE(HDC);
+DECLARE_HANDLE(HRGN);
+DECLARE_HANDLE(HWND);
+DECLARE_HANDLE(HMENU);
+DECLARE_HANDLE(HACCEL);
+DECLARE_HANDLE(HTASK);
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+
+typedef void FAR * LPVOID;
+typedef WORD FAR * LPWORD;
+typedef DWORD FAR * LPDWORD;
+typedef char FAR* LPSTR;
+typedef const char FAR* LPCSTR;
+typedef void FAR* LPLOGPALETTE;
+typedef void FAR* LPMSG;
+//typedef struct tagMSG FAR *LPMSG;
+
+typedef HANDLE FAR *LPHANDLE;
+typedef struct tagRECT FAR *LPRECT;
+
+typedef struct FARSTRUCT tagSIZE
+{
+ int cx;
+ int cy;
+} SIZE;
+typedef SIZE* PSIZE;
+
+
+#endif /* WINAPI */
+
+
+typedef short SHORT;
+typedef unsigned short USHORT;
+typedef DWORD ULONG;
+
+
+#ifndef HUGEP
+#ifdef WIN32
+#define HUGEP
+#else
+#define HUGEP __huge
+#endif // WIN32
+#endif // HUGEP
+
+typedef WORD WCHAR;
+
+#ifndef WIN32
+typedef struct FARSTRUCT _LARGE_INTEGER {
+ DWORD LowPart;
+ LONG HighPart;
+} LARGE_INTEGER, *PLARGE_INTEGER;
+#endif
+#define LISet32(li, v) ((li).HighPart = ((LONG)(v)) < 0 ? -1 : 0, (li).LowPart = (v))
+
+#ifndef WIN32
+typedef struct FARSTRUCT _ULARGE_INTEGER {
+ DWORD LowPart;
+ DWORD HighPart;
+} ULARGE_INTEGER, *PULARGE_INTEGER;
+#endif
+#define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v))
+
+#ifndef _WINDOWS_
+#ifndef _FILETIME_
+#define _FILETIME_
+typedef struct FARSTRUCT tagFILETIME
+{
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME;
+#endif
+#endif
+
+#ifdef WIN32
+#define HTASK DWORD
+#endif
+
+#include "scode.h"
+
+
+
+// *********************** Compobj errors **********************************
+
+#define CO_E_NOTINITIALIZED (CO_E_FIRST + 0x0)
+// CoInitialize has not been called and must be
+
+#define CO_E_ALREADYINITIALIZED (CO_E_FIRST + 0x1)
+// CoInitialize has already been called and cannot be called again (temporary)
+
+#define CO_E_CANTDETERMINECLASS (CO_E_FIRST + 0x2)
+// can't determine clsid (e.g., extension not in reg.dat)
+
+#define CO_E_CLASSSTRING (CO_E_FIRST + 0x3)
+// the string form of the clsid is invalid (including ole1 classes)
+
+#define CO_E_IIDSTRING (CO_E_FIRST + 0x4)
+// the string form of the iid is invalid
+
+#define CO_E_APPNOTFOUND (CO_E_FIRST + 0x5)
+// application not found
+
+#define CO_E_APPSINGLEUSE (CO_E_FIRST + 0x6)
+// application cannot be run more than once
+
+#define CO_E_ERRORINAPP (CO_E_FIRST + 0x7)
+// some error in the app program file
+
+#define CO_E_DLLNOTFOUND (CO_E_FIRST + 0x8)
+// dll not found
+
+#define CO_E_ERRORINDLL (CO_E_FIRST + 0x9)
+// some error in the dll file
+
+#define CO_E_WRONGOSFORAPP (CO_E_FIRST + 0xa)
+// app written for other version of OS or other OS altogether
+
+#define CO_E_OBJNOTREG (CO_E_FIRST + 0xb)
+// object is not registered
+
+#define CO_E_OBJISREG (CO_E_FIRST + 0xc)
+// object is already registered
+
+#define CO_E_OBJNOTCONNECTED (CO_E_FIRST + 0xd)
+// handler is not connected to server
+
+#define CO_E_APPDIDNTREG (CO_E_FIRST + 0xe)
+// app was launched, but didn't registered a class factory
+
+
+// ********************* ClassObject errors ********************************
+
+#define CLASS_E_NOAGGREGATION (CLASSFACTORY_E_FIRST + 0x0)
+// class does not support aggregation (or class object is remote)
+
+#define CLASS_E_CLASSNOTAVAILABLE (CLASSFACTORY_E_FIRST + 0x1)
+// dll doesn't support that class (returned from DllGetClassObject)
+
+
+// *********************** Reg.dat errors **********************************
+
+#define REGDB_E_READREGDB (REGDB_E_FIRST + 0x0)
+// some error reading the registration database
+
+#define REGDB_E_WRITEREGDB (REGDB_E_FIRST + 0x1)
+// some error reading the registration database
+
+#define REGDB_E_KEYMISSING (REGDB_E_FIRST + 0x2)
+// some error reading the registration database
+
+#define REGDB_E_INVALIDVALUE (REGDB_E_FIRST + 0x3)
+// some error reading the registration database
+
+#define REGDB_E_CLASSNOTREG (REGDB_E_FIRST + 0x4)
+// some error reading the registration database
+
+#define REGDB_E_IIDNOTREG (REGDB_E_FIRST + 0x5)
+// some error reading the registration database
+
+
+// *************************** RPC errors **********************************
+
+#define RPC_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_RPC, 0x000)
+
+// call was rejected by callee, either by MF::HandleIncomingCall or
+#define RPC_E_CALL_REJECTED (RPC_E_FIRST + 0x1)
+
+// call was canceld by call - returned by MessagePending
+// this code only occurs if MessagePending return cancel
+#define RPC_E_CALL_CANCELED (RPC_E_FIRST + 0x2)
+
+// the caller is dispatching an intertask SendMessage call and
+// can NOT call out via PostMessage
+#define RPC_E_CANTPOST_INSENDCALL (RPC_E_FIRST + 0x3)
+
+// the caller is dispatching an asynchronus call can NOT
+// make an outgoing call on behalf of this call
+#define RPC_E_CANTCALLOUT_INASYNCCALL (RPC_E_FIRST + 0x4)
+
+// the caller is not in a state where an outgoing call can be made
+// this is the case if the caller has an outstandig call and
+// another incoming call was excepted by HIC; now the caller is
+// not allowed to call out again
+#define RPC_E_CANTCALLOUT_INEXTERNALCALL (RPC_E_FIRST + 0x5)
+
+// the connection terminated or is in a bogus state
+// and can not be used any more. Other connections
+// are still valid.
+#define RPC_E_CONNECTION_TERMINATED (RPC_E_FIRST + 0x6)
+
+// the callee (server [not server application]) is not available
+// and disappeared; all connections are invalid
+#define RPC_E_SERVER_DIED (RPC_E_FIRST + 0x7)
+
+// the caller (client ) disappeared while the callee (server) was
+// processing a call
+#define RPC_E_CLIENT_DIED (RPC_E_FIRST + 0x8)
+
+// the date paket with the marshalled parameter data is
+// incorrect
+#define RPC_E_INVALID_DATAPACKET (RPC_E_FIRST + 0x9)
+
+// the call was not transmitted properly; the message queue
+// was full and was not emptied after yielding
+#define RPC_E_CANTTRANSMIT_CALL (RPC_E_FIRST + 0xa)
+
+// the client (caller) can not marshall the parameter data
+// or unmarshall the return data - low memory etc.
+#define RPC_E_CLIENT_CANTMARSHAL_DATA (RPC_E_FIRST + 0xb)
+#define RPC_E_CLIENT_CANTUNMARSHAL_DATA (RPC_E_FIRST + 0xc)
+
+// the server (caller) can not unmarshall the parameter data
+// or marshall the return data - low memory
+#define RPC_E_SERVER_CANTMARSHAL_DATA (RPC_E_FIRST + 0xd)
+#define RPC_E_SERVER_CANTUNMARSHAL_DATA (RPC_E_FIRST + 0xe)
+
+// received data are invalid; can be server or
+// client data
+#define RPC_E_INVALID_DATA (RPC_E_FIRST + 0xf)
+
+// a particular parameter is invalid and can not be un/marshalled
+#define RPC_E_INVALID_PARAMETER (RPC_E_FIRST + 0x10)
+
+// DDE conversation - no second outgoing call on same channel
+#define RPC_E_CANTCALLOUT_AGAIN (RPC_E_FIRST + 0x11)
+
+// a internal error occured
+#define RPC_E_UNEXPECTED (RPC_E_FIRST + 0xFFFF)
+
+
+/****** Globally Unique Ids *************************************************/
+
+#ifdef __cplusplus
+
+struct FAR GUID
+{
+ DWORD Data1;
+ WORD Data2;
+ WORD Data3;
+ BYTE Data4[8];
+
+ BOOL operator==(const GUID& iidOther) const
+
+#ifdef WIN32
+ { return !memcmp(&Data1,&iidOther.Data1,sizeof(GUID)); }
+#else
+ { return !_fmemcmp(&Data1,&iidOther.Data1,sizeof(GUID)); }
+#endif
+ BOOL operator!=(const GUID& iidOther) const
+ { return !((*this) == iidOther); }
+};
+
+#else
+typedef struct GUID
+{
+ DWORD Data1;
+ WORD Data2;
+ WORD Data3;
+ BYTE Data4[8];
+} GUID;
+#endif
+
+typedef GUID FAR* LPGUID;
+
+
+// macros to define byte pattern for a GUID.
+// Example: DEFINE_GUID(GUID_XXX, a, b, c, ...);
+//
+// Each dll/exe must initialize the GUIDs once. This is done in one of
+// two ways. If you are not using precompiled headers for the file(s) which
+// initializes the GUIDs, define INITGUID before including compobj.h. This
+// is how OLE builds the initialized versions of the GUIDs which are included
+// in compobj.dll.
+//
+// The alternative (which some versions of the compiler don't handle properly;
+// they wind up with the initialized GUIDs in a data, not a text segment),
+// is to use a precompiled version of compobj.h and then include initguid.h
+// after compobj.h followed by one or more of the guid defintion files.
+
+
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID CDECL FAR name
+
+#ifdef INITGUID
+#include "initguid.h"
+#endif
+
+#define DEFINE_OLEGUID(name, l, w1, w2) \
+ DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46)
+
+
+// Interface ID are just a kind of GUID
+typedef GUID IID;
+typedef IID FAR* LPIID;
+#define IID_NULL GUID_NULL
+#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
+
+
+// Class ID are just a kind of GUID
+typedef GUID CLSID;
+typedef CLSID FAR* LPCLSID;
+#define CLSID_NULL GUID_NULL
+#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
+
+
+#if defined(__cplusplus)
+#define REFGUID const GUID FAR&
+#define REFIID const IID FAR&
+#define REFCLSID const CLSID FAR&
+#else
+#define REFGUID const GUID FAR* const
+#define REFIID const IID FAR* const
+#define REFCLSID const CLSID FAR* const
+#endif
+
+
+#ifndef INITGUID
+#include "coguid.h"
+#endif
+
+/****** Other value types ***************************************************/
+
+// memory context values; passed to CoGetMalloc
+typedef enum tagMEMCTX
+{
+ MEMCTX_TASK = 1, // task (private) memory
+ MEMCTX_SHARED = 2, // shared memory (between processes)
+#ifdef _MAC
+ MEMCTX_MACSYSTEM = 3, // on the mac, the system heap
+#endif
+
+ // these are mostly for internal use...
+ MEMCTX_UNKNOWN = -1, // unknown context (when asked about it)
+ MEMCTX_SAME = -2, // same context (as some other pointer)
+} MEMCTX;
+
+
+
+// class context: used to determine what scope and kind of class object to use
+// NOTE: this is a bitwise enum
+typedef enum tagCLSCTX
+{
+ CLSCTX_INPROC_SERVER = 1, // server dll (runs in same process as caller)
+ CLSCTX_INPROC_HANDLER = 2, // handler dll (runs in same process as caller)
+ CLSCTX_LOCAL_SERVER = 4 // server exe (runs on same machine; diff proc)
+} CLSCTX;
+
+#define CLSCTX_ALL (CLSCTX_INPROC_SERVER| \
+ CLSCTX_INPROC_HANDLER| \
+ CLSCTX_LOCAL_SERVER)
+
+#define CLSCTX_INPROC (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER)
+
+#define CLSCTX_SERVER (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER)
+
+
+// class registration flags; passed to CoRegisterClassObject
+typedef enum tagREGCLS
+{
+ REGCLS_SINGLEUSE = 0, // class object only generates one instance
+ REGCLS_MULTIPLEUSE = 1, // same class object genereates multiple inst.
+ // and local automatically goes into inproc tbl.
+ REGCLS_MULTI_SEPARATE = 2, // multiple use, but separate control over each
+ // context.
+
+ // NOTE: CLSCTX_LOCAL_SERVER, REGCLS_MULTIPLEUSE is the same as
+ // (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER), REGCLS_MULTI_SEPARATE, but
+ // not the same as CLSCTX_LOCAL_SERVER, REGCLS_MULTI_SEPARATE.
+} REGCLS;
+
+
+// interface marshaling definitions
+#define MARSHALINTERFACE_MIN 40 // minimum number of bytes for interface marshl
+
+// marshaling flags; passed to CoMarshalInterface
+typedef enum tagMSHLFLAGS
+{
+ MSHLFLAGS_NORMAL = 0, // normal marshaling via proxy/stub
+ MSHLFLAGS_TABLESTRONG = 1, // keep object alive; must explicitly release
+ MSHLFLAGS_TABLEWEAK = 2 // doesn't hold object alive; still must release
+} MSHLFLAGS;
+
+// marshal context: determines the destination context of the marshal operation
+typedef enum tagMSHCTX
+{
+ MSHCTX_LOCAL = 0, // unmarshal context is local (eg.shared memory)
+ MSHCTX_NOSHAREDMEM = 1, // unmarshal context has no shared memory access
+} MSHCTX;
+
+
+// call type used by IMessageFilter::HandleIncommingMessage
+typedef enum tagCALLTYPE
+{
+ CALLTYPE_TOPLEVEL = 1, // toplevel call - no outgoing call
+ CALLTYPE_NESTED = 2, // callback on behalf of previous outgoing call - should always handle
+ CALLTYPE_ASYNC = 3, // aysnchronous call - can NOT be rejected
+ CALLTYPE_TOPLEVEL_CALLPENDING = 4, // new toplevel call with new LID
+ CALLTYPE_ASYNC_CALLPENDING = 5 // async call - can NOT be rejected
+} CALLTYPE;
+
+typedef struct tagINTERFACEINFO
+{
+ interface IUnknown FAR *pUnk; // the pointer to the object
+ IID iid; // interface id
+ WORD wMethod; // interface methode
+} INTERFACEINFO, FAR * LPINTERFACEINFO;
+
+// status of server call - returned by IMessageFilter::HandleIncommingCall
+// and passed to IMessageFilter::RetryRejectedCall
+typedef enum tagSERVERCALL
+{
+ SERVERCALL_ISHANDLED = 0,
+ SERVERCALL_REJECTED = 1,
+ SERVERCALL_RETRYLATER = 2
+} SERVERCALL;
+
+
+// Pending type indicates the level of nesting
+typedef enum tagPENDINGTYPE
+{
+ PENDINGTYPE_TOPLEVEL = 1, // toplevel call
+ PENDINGTYPE_NESTED = 2, // nested call
+} PENDINGTYPE;
+
+// return values of MessagePending
+typedef enum tagPENDINGMSG
+{
+ PENDINGMSG_CANCELCALL = 0, // cancel the outgoing call
+ PENDINGMSG_WAITNOPROCESS = 1, // wait for the return and don't dispatch the message
+ PENDINGMSG_WAITDEFPROCESS = 2 // wait and dispatch the message
+
+} PENDINGMSG;
+
+
+// bit flags for IExternalConnection
+typedef enum tagEXTCONN
+{
+ EXTCONN_STRONG = 0x0001 // strong connection
+} EXTCONN;
+
+
+/****** IUnknown Interface **************************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IUnknown
+
+DECLARE_INTERFACE(IUnknown)
+{
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+};
+
+typedef IUnknown FAR* LPUNKNOWN;
+
+
+/****** Class Factory Interface *******************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IClassFactory
+
+DECLARE_INTERFACE_(IClassFactory, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IClassFactory methods ***
+ STDMETHOD(CreateInstance) (THIS_ LPUNKNOWN pUnkOuter,
+ REFIID riid,
+ LPVOID FAR* ppvObject) PURE;
+ STDMETHOD(LockServer) (THIS_ BOOL fLock) PURE;
+
+};
+typedef IClassFactory FAR* LPCLASSFACTORY;
+
+
+/****** Memory Allocation Interface ***************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IMalloc
+
+DECLARE_INTERFACE_(IMalloc, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IMalloc methods ***
+ STDMETHOD_(void FAR*, Alloc) (THIS_ ULONG cb) PURE;
+ STDMETHOD_(void FAR*, Realloc) (THIS_ void FAR* pv, ULONG cb) PURE;
+ STDMETHOD_(void, Free) (THIS_ void FAR* pv) PURE;
+ STDMETHOD_(ULONG, GetSize) (THIS_ void FAR* pv) PURE;
+ STDMETHOD_(int, DidAlloc) (THIS_ void FAR* pv) PURE;
+ STDMETHOD_(void, HeapMinimize) (THIS) PURE;
+};
+typedef IMalloc FAR* LPMALLOC;
+
+
+/****** IMarshal Interface ************************************************/
+
+// forward declaration for IStream; must include storage.h later to use
+#ifdef __cplusplus
+interface IStream;
+#else
+typedef interface IStream IStream;
+#endif
+typedef IStream FAR* LPSTREAM;
+
+
+#undef INTERFACE
+#define INTERFACE IMarshal
+
+DECLARE_INTERFACE_(IMarshal, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IMarshal methods ***
+ STDMETHOD(GetUnmarshalClass)(THIS_ REFIID riid, LPVOID pv,
+ DWORD dwDestContext, LPVOID pvDestContext,
+ DWORD mshlflags, LPCLSID pCid) PURE;
+ STDMETHOD(GetMarshalSizeMax)(THIS_ REFIID riid, LPVOID pv,
+ DWORD dwDestContext, LPVOID pvDestContext,
+ DWORD mshlflags, LPDWORD pSize) PURE;
+ STDMETHOD(MarshalInterface)(THIS_ LPSTREAM pStm, REFIID riid,
+ LPVOID pv, DWORD dwDestContext, LPVOID pvDestContext,
+ DWORD mshlflags) PURE;
+ STDMETHOD(UnmarshalInterface)(THIS_ LPSTREAM pStm, REFIID riid,
+ LPVOID FAR* ppv) PURE;
+ STDMETHOD(ReleaseMarshalData)(THIS_ LPSTREAM pStm) PURE;
+ STDMETHOD(DisconnectObject)(THIS_ DWORD dwReserved) PURE;
+};
+typedef IMarshal FAR* LPMARSHAL;
+
+
+#undef INTERFACE
+#define INTERFACE IStdMarshalInfo
+
+DECLARE_INTERFACE_(IStdMarshalInfo, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IStdMarshalInfo methods ***
+ STDMETHOD(GetClassForHandler)(THIS_ DWORD dwDestContext,
+ LPVOID pvDestContext, LPCLSID pClsid) PURE;
+};
+typedef IStdMarshalInfo FAR* LPSTDMARSHALINFO;
+
+
+/****** Message Filter Interface *******************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IMessageFilter
+
+DECLARE_INTERFACE_(IMessageFilter, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IMessageFilter methods ***
+ STDMETHOD_(DWORD, HandleInComingCall) (THIS_ DWORD dwCallType,
+ HTASK htaskCaller, DWORD dwTickCount,
+ DWORD dwReserved ) PURE;
+ STDMETHOD_(DWORD, RetryRejectedCall) (THIS_
+ HTASK htaskCallee, DWORD dwTickCount,
+ DWORD dwRejectType ) PURE;
+ STDMETHOD_(DWORD, MessagePending) (THIS_
+ HTASK htaskCallee, DWORD dwTickCount,
+ DWORD dwPendingType ) PURE;
+};
+typedef IMessageFilter FAR* LPMESSAGEFILTER;
+
+
+/****** External Connection Information ***********************************/
+
+#undef INTERFACE
+#define INTERFACE IExternalConnection
+
+DECLARE_INTERFACE_(IExternalConnection, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IExternalConnection methods ***
+ STDMETHOD_(DWORD, AddConnection) (THIS_ DWORD extconn, DWORD reserved) PURE;
+ STDMETHOD_(DWORD, ReleaseConnection) (THIS_ DWORD extconn, DWORD reserved, BOOL fLastReleaseCloses) PURE;
+};
+typedef IExternalConnection FAR* LPEXTERNALCONNECTION;
+
+
+/****** Enumerator Interfaces *********************************************/
+
+/*
+ * Since we don't use parametrized types, we put in explicit declarations
+ * of the enumerators we need.
+ */
+
+
+#undef INTERFACE
+#define INTERFACE IEnumString
+
+DECLARE_INTERFACE_(IEnumString, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IEnumString methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt,
+ LPSTR FAR* rgelt,
+ ULONG FAR* pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumString FAR* FAR* ppenm) PURE;
+};
+typedef IEnumString FAR* LPENUMSTRING;
+
+
+#undef INTERFACE
+#define INTERFACE IEnumUnknown
+
+DECLARE_INTERFACE_(IEnumUnknown, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IEnumUnknown methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt, LPUNKNOWN FAR* rgelt, ULONG FAR* pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumUnknown FAR* FAR* ppenm) PURE;
+};
+typedef IEnumUnknown FAR* LPENUMUNKNOWN;
+
+
+/****** STD Object API Prototypes *****************************************/
+
+STDAPI_(DWORD) CoBuildVersion( VOID );
+
+/* init/uninit */
+
+STDAPI CoInitialize(LPMALLOC pMalloc);
+STDAPI_(void) CoUninitialize(void);
+STDAPI CoGetMalloc(DWORD dwMemContext, LPMALLOC FAR* ppMalloc);
+STDAPI_(DWORD) CoGetCurrentProcess(void);
+STDAPI CoCreateStandardMalloc(DWORD memctx, IMalloc FAR* FAR* ppMalloc);
+
+
+/* register/revoke/get class objects */
+
+STDAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, LPVOID pvReserved,
+ REFIID riid, LPVOID FAR* ppv);
+STDAPI CoRegisterClassObject(REFCLSID rclsid, LPUNKNOWN pUnk,
+ DWORD dwClsContext, DWORD flags, LPDWORD lpdwRegister);
+STDAPI CoRevokeClassObject(DWORD dwRegister);
+
+
+/* marshaling interface pointers */
+
+STDAPI CoMarshalInterface(LPSTREAM pStm, REFIID riid, LPUNKNOWN pUnk,
+ DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags);
+STDAPI CoUnmarshalInterface(LPSTREAM pStm, REFIID riid, LPVOID FAR* ppv);
+STDAPI CoMarshalHresult(LPSTREAM pstm, HRESULT hresult);
+STDAPI CoUnmarshalHresult(LPSTREAM pstm, HRESULT FAR * phresult);
+STDAPI CoReleaseMarshalData(LPSTREAM pStm);
+STDAPI CoDisconnectObject(LPUNKNOWN pUnk, DWORD dwReserved);
+STDAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases);
+STDAPI CoGetStandardMarshal(REFIID riid, LPUNKNOWN pUnk,
+ DWORD dwDestContext, LPVOID pvDestContext, DWORD mshlflags,
+ LPMARSHAL FAR* ppMarshal);
+
+STDAPI_(BOOL) CoIsHandlerConnected(LPUNKNOWN pUnk);
+
+/* dll loading helpers; keeps track of ref counts and unloads all on exit */
+
+STDAPI_(HINSTANCE) CoLoadLibrary(LPSTR lpszLibName, BOOL bAutoFree);
+STDAPI_(void) CoFreeLibrary(HINSTANCE hInst);
+STDAPI_(void) CoFreeAllLibraries(void);
+STDAPI_(void) CoFreeUnusedLibraries(void);
+
+
+/* helper for creating instances */
+
+STDAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter,
+ DWORD dwClsContext, REFIID riid, LPVOID FAR* ppv);
+
+
+/* other helpers */
+STDAPI_(BOOL) IsEqualGUID(REFGUID rguid1, REFGUID rguid2);
+STDAPI StringFromCLSID(REFCLSID rclsid, LPSTR FAR* lplpsz);
+STDAPI CLSIDFromString(LPSTR lpsz, LPCLSID pclsid);
+STDAPI StringFromIID(REFIID rclsid, LPSTR FAR* lplpsz);
+STDAPI IIDFromString(LPSTR lpsz, LPIID lpiid);
+STDAPI_(BOOL) CoIsOle1Class(REFCLSID rclsid);
+STDAPI ProgIDFromCLSID (REFCLSID clsid, LPSTR FAR* lplpszProgID);
+STDAPI CLSIDFromProgID (LPCSTR lpszProgID, LPCLSID lpclsid);
+STDAPI_(int) StringFromGUID2(REFGUID rguid, LPSTR lpsz, int cbMax);
+
+STDAPI CoCreateGuid(GUID FAR *pguid);
+
+STDAPI_(BOOL) CoFileTimeToDosDateTime(
+ FILETIME FAR* lpFileTime, LPWORD lpDosDate, LPWORD lpDosTime);
+STDAPI_(BOOL) CoDosDateTimeToFileTime(
+ WORD nDosDate, WORD nDosTime, FILETIME FAR* lpFileTime);
+STDAPI CoFileTimeNow( FILETIME FAR* lpFileTime );
+
+
+STDAPI CoRegisterMessageFilter( LPMESSAGEFILTER lpMessageFilter,
+ LPMESSAGEFILTER FAR* lplpMessageFilter );
+
+
+/* TreatAs APIS */
+
+STDAPI CoGetTreatAsClass(REFCLSID clsidOld, LPCLSID pClsidNew);
+STDAPI CoTreatAsClass(REFCLSID clsidOld, REFCLSID clsidNew);
+
+
+/* the server dlls must define their DllGetClassObject and DllCanUnloadNow
+ * to match these; the typedefs are located here to ensure all are changed at
+ * the same time.
+ */
+
+STDAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID FAR* ppv);
+#ifdef _MAC
+typedef STDAPICALLTYPE HRESULT (FAR* LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID FAR*);
+#else
+typedef HRESULT (STDAPICALLTYPE FAR* LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID FAR*);
+#endif
+
+
+STDAPI DllCanUnloadNow(void);
+#ifdef _MAC
+typedef STDAPICALLTYPE HRESULT (FAR* LPFNCANUNLOADNOW)(void);
+#else
+typedef HRESULT (STDAPICALLTYPE FAR* LPFNCANUNLOADNOW)(void);
+#endif
+
+
+/****** Debugging Helpers *************************************************/
+
+#ifdef _DEBUG
+// writes to the debug port and displays a message box
+STDAPI FnAssert(LPSTR lpstrExpr, LPSTR lpstrMsg, LPSTR lpstrFileName, UINT iLine);
+#endif // _DEBUG
+
+#endif // _COMPOBJ_H_
diff --git a/private/oleauto/ole/win16/dvobj.h b/private/oleauto/ole/win16/dvobj.h
new file mode 100644
index 000000000..9c3dac58f
--- /dev/null
+++ b/private/oleauto/ole/win16/dvobj.h
@@ -0,0 +1,480 @@
+/*****************************************************************************\
+* *
+* dvobj.h - Data/View object definitions *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+#if !defined( _DVOBJ_H_ )
+#define _DVOBJ_H_
+
+/****** DV value types ******************************************************/
+
+// forward type declarations
+#if defined(__cplusplus)
+interface IStorage;
+interface IStream;
+interface IAdviseSink;
+interface IMoniker;
+#else
+typedef interface IStorage IStorage;
+typedef interface IStream IStream;
+typedef interface IAdviseSink IAdviseSink;
+typedef interface IMoniker IMoniker;
+#endif
+
+typedef IStorage FAR* LPSTORAGE;
+typedef IStream FAR* LPSTREAM;
+typedef IAdviseSink FAR* LPADVISESINK;
+typedef IMoniker FAR* LPMONIKER;
+
+
+#if !defined(_MAC)
+typedef WORD CLIPFORMAT;
+#else
+typedef unsigned long CLIPFORMAT; // ResType
+#endif
+typedef CLIPFORMAT FAR* LPCLIPFORMAT;
+
+
+// Data/View aspect; specifies the desired aspect of the object when
+// drawing or getting data.
+typedef enum tagDVASPECT
+{
+ DVASPECT_CONTENT = 1,
+ DVASPECT_THUMBNAIL = 2,
+ DVASPECT_ICON = 4,
+ DVASPECT_DOCPRINT = 8
+} DVASPECT;
+
+
+// Data/View target device; determines the device for drawing or gettting data
+typedef struct FARSTRUCT tagDVTARGETDEVICE
+{
+ DWORD tdSize;
+ WORD tdDriverNameOffset;
+ WORD tdDeviceNameOffset;
+ WORD tdPortNameOffset;
+ WORD tdExtDevmodeOffset;
+ BYTE tdData[1];
+} DVTARGETDEVICE;
+
+
+// Format, etc.; completely specifices the kind of data desired, including tymed
+typedef struct FARSTRUCT tagFORMATETC
+{
+ CLIPFORMAT cfFormat;
+ DVTARGETDEVICE FAR* ptd;
+ DWORD dwAspect;
+ LONG lindex;
+ DWORD tymed;
+} FORMATETC, FAR* LPFORMATETC;
+
+
+// TYpes of storage MEDiums; determines how data is stored or passed around
+typedef enum tagTYMED
+{
+ TYMED_HGLOBAL = 1,
+ TYMED_FILE = 2,
+ TYMED_ISTREAM = 4,
+ TYMED_ISTORAGE = 8,
+ TYMED_GDI = 16,
+ TYMED_MFPICT = 32,
+ TYMED_NULL = 0
+} TYMED;
+
+
+// DATA format DIRection
+typedef enum tagDATADIR
+{
+ DATADIR_GET = 1,
+ DATADIR_SET = 2,
+} DATADIR;
+
+
+// SToraGe MEDIUM; a block of data on a particular medium
+typedef struct FARSTRUCT tagSTGMEDIUM
+{
+ DWORD tymed;
+ union
+ {
+ HANDLE hGlobal;
+ LPSTR lpszFileName;
+ IStream FAR* pstm;
+ IStorage FAR* pstg;
+ }
+#ifdef NONAMELESSUNION
+ u // add a tag when name less unions not supported
+#endif
+ ;
+ IUnknown FAR* pUnkForRelease;
+} STGMEDIUM, FAR* LPSTGMEDIUM;
+
+
+// Advise Flags
+typedef enum tagADVF
+{
+ ADVF_NODATA = 1,
+ ADVF_PRIMEFIRST = 2,
+ ADVF_ONLYONCE = 4,
+ ADVF_DATAONSTOP = 64,
+ ADVFCACHE_NOHANDLER = 8,
+ ADVFCACHE_FORCEBUILTIN = 16,
+ ADVFCACHE_ONSAVE = 32
+} ADVF;
+
+
+// Stats for data; used by several enumerations and by at least one
+// implementation of IDataAdviseHolder; if a field is not used, it
+// will be NULL.
+typedef struct FARSTRUCT tagSTATDATA
+{ // field used by:
+ FORMATETC formatetc; // EnumAdvise, EnumData (cache), EnumFormats
+ DWORD advf; // EnumAdvise, EnumData (cache)
+ IAdviseSink FAR* pAdvSink; // EnumAdvise
+ DWORD dwConnection; // EnumAdvise
+} STATDATA;
+
+typedef STATDATA FAR* LPSTATDATA;
+
+
+
+/****** DV Interfaces ***************************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IEnumFORMATETC
+
+DECLARE_INTERFACE_(IEnumFORMATETC, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IEnumFORMATETC methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt, FORMATETC FAR * rgelt, ULONG FAR* pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumFORMATETC FAR* FAR* ppenum) PURE;
+};
+typedef IEnumFORMATETC FAR* LPENUMFORMATETC;
+
+
+#undef INTERFACE
+#define INTERFACE IEnumSTATDATA
+
+DECLARE_INTERFACE_(IEnumSTATDATA, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
+ STDMETHOD_(ULONG, AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG, Release) (THIS) PURE;
+
+ // *** IEnumSTATDATA methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt, STATDATA FAR * rgelt, ULONG FAR* pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumSTATDATA FAR* FAR* ppenum) PURE;
+};
+typedef IEnumSTATDATA FAR* LPENUMSTATDATA;
+
+
+
+#undef INTERFACE
+#define INTERFACE IDataObject
+
+#define DATA_E_FORMATETC DV_E_FORMATETC
+#define DATA_S_SAMEFORMATETC (DATA_S_FIRST + 0)
+
+DECLARE_INTERFACE_(IDataObject, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG, Release) (THIS) PURE;
+
+ // *** IDataObject methods ***
+ STDMETHOD(GetData) (THIS_ LPFORMATETC pformatetcIn,
+ LPSTGMEDIUM pmedium ) PURE;
+ STDMETHOD(GetDataHere) (THIS_ LPFORMATETC pformatetc,
+ LPSTGMEDIUM pmedium ) PURE;
+ STDMETHOD(QueryGetData) (THIS_ LPFORMATETC pformatetc ) PURE;
+ STDMETHOD(GetCanonicalFormatEtc) (THIS_ LPFORMATETC pformatetc,
+ LPFORMATETC pformatetcOut) PURE;
+ STDMETHOD(SetData) (THIS_ LPFORMATETC pformatetc, STGMEDIUM FAR * pmedium,
+ BOOL fRelease) PURE;
+ STDMETHOD(EnumFormatEtc) (THIS_ DWORD dwDirection,
+ LPENUMFORMATETC FAR* ppenumFormatEtc) PURE;
+
+ STDMETHOD(DAdvise) (THIS_ FORMATETC FAR* pFormatetc, DWORD advf,
+ LPADVISESINK pAdvSink, DWORD FAR* pdwConnection) PURE;
+ STDMETHOD(DUnadvise) (THIS_ DWORD dwConnection) PURE;
+ STDMETHOD(EnumDAdvise) (THIS_ LPENUMSTATDATA FAR* ppenumAdvise) PURE;
+};
+typedef IDataObject FAR* LPDATAOBJECT;
+
+
+
+#undef INTERFACE
+#define INTERFACE IViewObject
+
+#define VIEW_E_DRAW (VIEW_E_FIRST)
+#define E_DRAW VIEW_E_DRAW
+
+#define VIEW_S_ALREADY_FROZEN (VIEW_S_FIRST)
+
+DECLARE_INTERFACE_(IViewObject, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IViewObject methods ***
+ STDMETHOD(Draw) (THIS_ DWORD dwDrawAspect, LONG lindex,
+ void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
+ HDC hicTargetDev,
+ HDC hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ BOOL (CALLBACK * pfnContinue) (DWORD),
+ DWORD dwContinue) PURE;
+
+ STDMETHOD(GetColorSet) (THIS_ DWORD dwDrawAspect, LONG lindex,
+ void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
+ HDC hicTargetDev,
+ LPLOGPALETTE FAR* ppColorSet) PURE;
+
+ STDMETHOD(Freeze)(THIS_ DWORD dwDrawAspect, LONG lindex,
+ void FAR* pvAspect,
+ DWORD FAR* pdwFreeze) PURE;
+ STDMETHOD(Unfreeze) (THIS_ DWORD dwFreeze) PURE;
+ STDMETHOD(SetAdvise) (THIS_ DWORD aspects, DWORD advf,
+ LPADVISESINK pAdvSink) PURE;
+ STDMETHOD(GetAdvise) (THIS_ DWORD FAR* pAspects, DWORD FAR* pAdvf,
+ LPADVISESINK FAR* ppAdvSink) PURE;
+};
+typedef IViewObject FAR* LPVIEWOBJECT;
+
+
+#undef INTERFACE
+#define INTERFACE IViewObject2
+
+DECLARE_INTERFACE_(IViewObject2, IViewObject)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IViewObject methods ***
+ STDMETHOD(Draw) (THIS_ DWORD dwDrawAspect, LONG lindex,
+ void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
+ HDC hicTargetDev,
+ HDC hdcDraw,
+ LPCRECTL lprcBounds,
+ LPCRECTL lprcWBounds,
+ BOOL (CALLBACK * pfnContinue) (DWORD),
+ DWORD dwContinue) PURE;
+
+ STDMETHOD(GetColorSet) (THIS_ DWORD dwDrawAspect, LONG lindex,
+ void FAR* pvAspect, DVTARGETDEVICE FAR * ptd,
+ HDC hicTargetDev,
+ LPLOGPALETTE FAR* ppColorSet) PURE;
+
+ STDMETHOD(Freeze)(THIS_ DWORD dwDrawAspect, LONG lindex,
+ void FAR* pvAspect,
+ DWORD FAR* pdwFreeze) PURE;
+ STDMETHOD(Unfreeze) (THIS_ DWORD dwFreeze) PURE;
+ STDMETHOD(SetAdvise) (THIS_ DWORD aspects, DWORD advf,
+ LPADVISESINK pAdvSink) PURE;
+ STDMETHOD(GetAdvise) (THIS_ DWORD FAR* pAspects, DWORD FAR* pAdvf,
+ LPADVISESINK FAR* ppAdvSink) PURE;
+
+ // *** IViewObject2 methods ***
+ STDMETHOD(GetExtent) (THIS_ DWORD dwDrawAspect, LONG lindex,
+ DVTARGETDEVICE FAR * ptd, LPSIZEL lpsizel) PURE;
+
+};
+typedef IViewObject2 FAR* LPVIEWOBJECT2;
+
+
+#undef INTERFACE
+#define INTERFACE IAdviseSink
+
+DECLARE_INTERFACE_(IAdviseSink, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IAdviseSink methods ***
+ STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC FAR* pFormatetc,
+ STGMEDIUM FAR* pStgmed) PURE;
+ STDMETHOD_(void,OnViewChange)(THIS_ DWORD dwAspect, LONG lindex) PURE;
+ STDMETHOD_(void,OnRename)(THIS_ LPMONIKER pmk) PURE;
+ STDMETHOD_(void,OnSave)(THIS) PURE;
+ STDMETHOD_(void,OnClose)(THIS) PURE;
+};
+typedef IAdviseSink FAR* LPADVISESINK;
+
+
+
+#undef INTERFACE
+#define INTERFACE IAdviseSink2
+
+DECLARE_INTERFACE_(IAdviseSink2, IAdviseSink)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IAdviseSink methods ***
+ STDMETHOD_(void,OnDataChange)(THIS_ FORMATETC FAR* pFormatetc,
+ STGMEDIUM FAR* pStgmed) PURE;
+ STDMETHOD_(void,OnViewChange)(THIS_ DWORD dwAspect, LONG lindex) PURE;
+ STDMETHOD_(void,OnRename)(THIS_ LPMONIKER pmk) PURE;
+ STDMETHOD_(void,OnSave)(THIS) PURE;
+ STDMETHOD_(void,OnClose)(THIS) PURE;
+
+ // *** IAdviseSink2 methods ***
+ STDMETHOD_(void,OnLinkSrcChange)(THIS_ LPMONIKER pmk) PURE;
+};
+typedef IAdviseSink2 FAR* LPADVISESINK2;
+
+
+
+#undef INTERFACE
+#define INTERFACE IDataAdviseHolder
+
+DECLARE_INTERFACE_(IDataAdviseHolder, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IDataAdviseHolder methods ***
+ STDMETHOD(Advise)(THIS_ LPDATAOBJECT pDataObject, FORMATETC FAR* pFetc,
+ DWORD advf, LPADVISESINK pAdvise, DWORD FAR* pdwConnection) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD dwConnection) PURE;
+ STDMETHOD(EnumAdvise)(THIS_ LPENUMSTATDATA FAR* ppenumAdvise) PURE;
+
+ STDMETHOD(SendOnDataChange)(THIS_ LPDATAOBJECT pDataObject, DWORD dwReserved, DWORD advf) PURE;
+};
+typedef IDataAdviseHolder FAR* LPDATAADVISEHOLDER;
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleCache
+
+#define CACHE_E_NOCACHE_UPDATED (CACHE_E_FIRST)
+
+#define CACHE_S_FORMATETC_NOTSUPPORTED (CACHE_S_FIRST)
+#define CACHE_S_SAMECACHE (CACHE_S_FIRST+1)
+#define CACHE_S_SOMECACHES_NOTUPDATED (CACHE_S_FIRST+2)
+
+
+DECLARE_INTERFACE_(IOleCache, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleCache methods ***
+ STDMETHOD(Cache) (THIS_ LPFORMATETC lpFormatetc, DWORD advf, LPDWORD lpdwConnection) PURE;
+ STDMETHOD(Uncache) (THIS_ DWORD dwConnection) PURE;
+ STDMETHOD(EnumCache) (THIS_ LPENUMSTATDATA FAR* ppenumStatData) PURE;
+ STDMETHOD(InitCache) (THIS_ LPDATAOBJECT pDataObject) PURE;
+ STDMETHOD(SetData) (THIS_ LPFORMATETC pformatetc, STGMEDIUM FAR * pmedium,
+ BOOL fRelease) PURE;
+};
+typedef IOleCache FAR* LPOLECACHE;
+
+
+
+// Cache update Flags
+
+#define UPDFCACHE_NODATACACHE 0x00000001
+#define UPDFCACHE_ONSAVECACHE 0x00000002
+#define UPDFCACHE_ONSTOPCACHE 0x00000004
+#define UPDFCACHE_NORMALCACHE 0x00000008
+#define UPDFCACHE_IFBLANK 0x00000010
+#define UPDFCACHE_ONLYIFBLANK 0x80000000
+
+#define UPDFCACHE_IFBLANKORONSAVECACHE (UPDFCACHE_IFBLANK | UPDFCACHE_ONSAVECACHE )
+#define UPDFCACHE_ALL (~UPDFCACHE_ONLYIFBLANK)
+#define UPDFCACHE_ALLBUTNODATACACHE (UPDFCACHE_ALL & ~UPDFCACHE_NODATACACHE)
+
+
+// IOleCache2::DiscardCache options
+typedef enum tagDISCARDCACHE
+{
+ DISCARDCACHE_SAVEIFDIRTY = 0, // Save all dirty cache before discarding
+ DISCARDCACHE_NOSAVE = 1 // Don't save dirty caches before
+ // discarding
+} DISCARDCACHE;
+
+
+#undef INTERFACE
+#define INTERFACE IOleCache2
+
+DECLARE_INTERFACE_(IOleCache2, IOleCache)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG, Release) (THIS) PURE;
+
+ // *** IOleCache methods ***
+ STDMETHOD(Cache) (THIS_ LPFORMATETC lpFormatetc, DWORD advf, LPDWORD lpdwConnection) PURE;
+ STDMETHOD(Uncache) (THIS_ DWORD dwConnection) PURE;
+ STDMETHOD(EnumCache) (THIS_ LPENUMSTATDATA FAR* ppenumStatData) PURE;
+ STDMETHOD(InitCache) (THIS_ LPDATAOBJECT pDataObject) PURE;
+ STDMETHOD(SetData) (THIS_ LPFORMATETC pformatetc, STGMEDIUM FAR * pmedium,
+ BOOL fRelease) PURE;
+
+ // *** IOleCache2 methods ***
+ STDMETHOD(UpdateCache) (THIS_ LPDATAOBJECT pDataObject, DWORD grfUpdf,
+ LPVOID pReserved) PURE;
+ STDMETHOD(DiscardCache) (THIS_ DWORD dwDiscardOptions) PURE;
+
+};
+typedef IOleCache2 FAR* LPOLECACHE2;
+
+
+#undef INTERFACE
+#define INTERFACE IOleCacheControl
+
+DECLARE_INTERFACE_(IOleCacheControl, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG, Release) (THIS) PURE;
+
+ // *** IDataObject methods ***
+ STDMETHOD(OnRun) (THIS_ LPDATAOBJECT pDataObject) PURE;
+ STDMETHOD(OnStop) (THIS) PURE;
+};
+typedef IOleCacheControl FAR* LPOLECACHECONTROL;
+
+
+
+/****** DV APIs ***********************************************************/
+
+
+STDAPI CreateDataAdviseHolder(LPDATAADVISEHOLDER FAR* ppDAHolder);
+
+STDAPI CreateDataCache(LPUNKNOWN pUnkOuter, REFCLSID rclsid,
+ REFIID iid, LPVOID FAR* ppv);
+
+#endif // _DVOBJ_H_
diff --git a/private/oleauto/ole/win16/initguid.h b/private/oleauto/ole/win16/initguid.h
new file mode 100644
index 000000000..e7406e3c2
--- /dev/null
+++ b/private/oleauto/ole/win16/initguid.h
@@ -0,0 +1,38 @@
+/*****************************************************************************\
+* *
+* initguid.h - Definitions for controlling GUID initialization *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+// Include after compobj.h to enable GUID initialization. This
+// must be done once per exe/dll.
+//
+// After this file, include one or more of the GUID definition files.
+//
+// NOTE: ole2.lib contains references to all GUIDs defined by OLE.
+
+#ifndef DEFINE_GUID
+#pragma error "initguid: must include compobj.h first."
+#endif
+
+#undef DEFINE_GUID
+
+#ifdef _MAC
+#define __based(a)
+#endif
+
+#ifdef WIN32
+#define __based(a)
+#endif
+
+#ifdef __TURBOC__
+#define __based(a)
+#endif
+
+#define DEFINE_GUID(name, l, w1, w2, b1, b2, b3, b4, b5, b6, b7, b8) \
+ EXTERN_C const GUID CDECL __based(__segname("_CODE")) name \
+ = { l, w1, w2, { b1, b2, b3, b4, b5, b6, b7, b8 } }
diff --git a/private/oleauto/ole/win16/moniker.h b/private/oleauto/ole/win16/moniker.h
new file mode 100644
index 000000000..0f1761ff8
--- /dev/null
+++ b/private/oleauto/ole/win16/moniker.h
@@ -0,0 +1,248 @@
+/*****************************************************************************\
+* *
+* moniker.h - Moniker and related interfaces and APIs *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+
+#if !defined( _MONIKER_H_ )
+#define _MONIKER_H_
+
+#define MK_E_CONNECTMANUALLY MK_E_FIRST
+#define MK_E_EXCEEDEDDEADLINE (MK_E_FIRST + 1)
+#define MK_E_NEEDGENERIC (MK_E_FIRST + 2)
+#define MK_E_UNAVAILABLE (MK_E_FIRST + 3)
+#define MK_E_SYNTAX (MK_E_FIRST + 4)
+#define MK_E_NOOBJECT (MK_E_FIRST + 5)
+#define MK_E_INVALIDEXTENSION (MK_E_FIRST + 6)
+#define MK_E_INTERMEDIATEINTERFACENOTSUPPORTED (MK_E_FIRST + 7)
+#define MK_E_NOTBINDABLE (MK_E_FIRST + 8)
+#define MK_E_NOTBOUND (MK_E_FIRST + 9)
+ // called IBindCtx->RevokeObjectBound for an
+ // object which was not bound
+#define MK_E_CANTOPENFILE (MK_E_FIRST + 10)
+#define MK_E_MUSTBOTHERUSER (MK_E_FIRST + 11)
+#define MK_E_NOINVERSE (MK_E_FIRST + 12)
+#define MK_E_NOSTORAGE (MK_E_FIRST + 13)
+#define MK_E_NOPREFIX (MK_E_FIRST + 14)
+
+
+// reserved MK_S_FIRST
+// reserved (MK_S_FIRST + 1)
+#define MK_S_REDUCED_TO_SELF (MK_S_FIRST + 2)
+// reserved (MK_S_FIRST + 3)
+#define MK_S_ME (MK_S_FIRST + 4)
+#define MK_S_HIM (MK_S_FIRST + 5)
+#define MK_S_US (MK_S_FIRST + 6)
+#define MK_S_MONIKERALREADYREGISTERED (MK_S_FIRST + 7)
+
+
+// bind options; variable sized
+typedef struct FARSTRUCT tagBIND_OPTS
+{
+ DWORD cbStruct; // sizeof(BIND_OPTS)
+ DWORD grfFlags;
+ DWORD grfMode;
+ DWORD dwTickCountDeadline;
+} BIND_OPTS, FAR* LPBIND_OPTS;
+
+
+// bind flags; controls binding; stored in bind options above
+typedef enum
+{
+ BIND_MAYBOTHERUSER = 1,
+ BIND_JUSTTESTEXISTENCE = 2
+} BIND_FLAGS;
+
+
+// system moniker types; returned from IsSystemMoniker.
+typedef enum tagMKSYS
+{
+ MKSYS_NONE = 0,
+ MKSYS_GENERICCOMPOSITE = 1,
+ MKSYS_FILEMONIKER = 2,
+ MKSYS_ANTIMONIKER = 3,
+ MKSYS_ITEMMONIKER = 4,
+ MKSYS_POINTERMONIKER = 5
+}MKSYS;
+
+
+// bit wise enum to control how much reduction takes place.
+typedef enum tagMKREDUCE
+{
+ MKRREDUCE_ONE = 3<<16,
+ MKRREDUCE_TOUSER = 2<<16,
+ MKRREDUCE_THROUGHUSER = 1<<16,
+ MKRREDUCE_ALL = 0
+} MKRREDUCE;
+
+
+#if defined(__cplusplus)
+interface IEnumMoniker;
+interface IRunningObjectTable;
+#else
+typedef interface IEnumMoniker IEnumMoniker;
+typedef interface IRunningObjectTable IRunningObjectTable;
+#endif
+
+typedef IEnumMoniker FAR* LPENUMMONIKER;
+typedef IRunningObjectTable FAR* LPRUNNINGOBJECTTABLE;
+
+
+
+#undef INTERFACE
+#define INTERFACE IBindCtx
+
+DECLARE_INTERFACE_(IBindCtx, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IBindCtx methods ***
+ STDMETHOD(RegisterObjectBound) (THIS_ LPUNKNOWN punk) PURE;
+ STDMETHOD(RevokeObjectBound) (THIS_ LPUNKNOWN punk) PURE;
+ STDMETHOD(ReleaseBoundObjects) (THIS) PURE;
+
+ STDMETHOD(SetBindOptions) (THIS_ LPBIND_OPTS pbindopts) PURE;
+ STDMETHOD(GetBindOptions) (THIS_ LPBIND_OPTS pbindopts) PURE;
+ STDMETHOD(GetRunningObjectTable) (THIS_ LPRUNNINGOBJECTTABLE FAR*
+ pprot) PURE;
+ STDMETHOD(RegisterObjectParam) (THIS_ LPSTR lpszKey, LPUNKNOWN punk) PURE;
+ STDMETHOD(GetObjectParam) (THIS_ LPSTR lpszKey, LPUNKNOWN FAR* ppunk) PURE;
+ STDMETHOD(EnumObjectParam) (THIS_ LPENUMSTRING FAR* ppenum) PURE;
+ STDMETHOD(RevokeObjectParam) (THIS_ LPSTR lpszKey) PURE;
+};
+typedef IBindCtx FAR* LPBC;
+typedef IBindCtx FAR* LPBINDCTX;
+
+
+
+#undef INTERFACE
+#define INTERFACE IMoniker
+
+DECLARE_INTERFACE_(IMoniker, IPersistStream)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IPersist methods ***
+ STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE;
+
+ // *** IPersistStream methods ***
+ STDMETHOD(IsDirty) (THIS) PURE;
+ STDMETHOD(Load) (THIS_ LPSTREAM pStm) PURE;
+ STDMETHOD(Save) (THIS_ LPSTREAM pStm,
+ BOOL fClearDirty) PURE;
+ STDMETHOD(GetSizeMax) (THIS_ ULARGE_INTEGER FAR * pcbSize) PURE;
+
+ // *** IMoniker methods ***
+ STDMETHOD(BindToObject) (THIS_ LPBC pbc, LPMONIKER pmkToLeft,
+ REFIID riidResult, LPVOID FAR* ppvResult) PURE;
+ STDMETHOD(BindToStorage) (THIS_ LPBC pbc, LPMONIKER pmkToLeft,
+ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD(Reduce) (THIS_ LPBC pbc, DWORD dwReduceHowFar, LPMONIKER FAR*
+ ppmkToLeft, LPMONIKER FAR * ppmkReduced) PURE;
+ STDMETHOD(ComposeWith) (THIS_ LPMONIKER pmkRight, BOOL fOnlyIfNotGeneric,
+ LPMONIKER FAR* ppmkComposite) PURE;
+ STDMETHOD(Enum) (THIS_ BOOL fForward, LPENUMMONIKER FAR* ppenumMoniker)
+ PURE;
+ STDMETHOD(IsEqual) (THIS_ LPMONIKER pmkOtherMoniker) PURE;
+ STDMETHOD(Hash) (THIS_ LPDWORD pdwHash) PURE;
+ STDMETHOD(IsRunning) (THIS_ LPBC pbc, LPMONIKER pmkToLeft, LPMONIKER
+ pmkNewlyRunning) PURE;
+ STDMETHOD(GetTimeOfLastChange) (THIS_ LPBC pbc, LPMONIKER pmkToLeft,
+ FILETIME FAR* pfiletime) PURE;
+ STDMETHOD(Inverse) (THIS_ LPMONIKER FAR* ppmk) PURE;
+ STDMETHOD(CommonPrefixWith) (THIS_ LPMONIKER pmkOther, LPMONIKER FAR*
+ ppmkPrefix) PURE;
+ STDMETHOD(RelativePathTo) (THIS_ LPMONIKER pmkOther, LPMONIKER FAR*
+ ppmkRelPath) PURE;
+ STDMETHOD(GetDisplayName) (THIS_ LPBC pbc, LPMONIKER pmkToLeft,
+ LPSTR FAR* lplpszDisplayName) PURE;
+ STDMETHOD(ParseDisplayName) (THIS_ LPBC pbc, LPMONIKER pmkToLeft,
+ LPSTR lpszDisplayName, ULONG FAR* pchEaten,
+ LPMONIKER FAR* ppmkOut) PURE;
+ STDMETHOD(IsSystemMoniker) (THIS_ LPDWORD pdwMksys) PURE;
+};
+typedef IMoniker FAR* LPMONIKER;
+
+
+// IRunningObjectTable::Register flags
+#define ROTFLAGS_REGISTRATIONKEEPSALIVE 1
+
+#undef INTERFACE
+#define INTERFACE IRunningObjectTable
+
+DECLARE_INTERFACE_(IRunningObjectTable, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IRunningObjectTable methods ***
+ STDMETHOD(Register) (THIS_ DWORD grfFlags, LPUNKNOWN punkObject,
+ LPMONIKER pmkObjectName, DWORD FAR * pdwRegister) PURE;
+ STDMETHOD(Revoke) (THIS_ DWORD dwRegister) PURE;
+ STDMETHOD(IsRunning) (THIS_ LPMONIKER pmkObjectName) PURE;
+ STDMETHOD(GetObject) (THIS_ LPMONIKER pmkObjectName,
+ LPUNKNOWN FAR* ppunkObject) PURE;
+ STDMETHOD(NoteChangeTime) (THIS_ DWORD dwRegister, FILETIME FAR * pfiletime) PURE;
+ STDMETHOD(GetTimeOfLastChange) (THIS_ LPMONIKER pmkObjectName, FILETIME FAR * pfiletime) PURE;
+ STDMETHOD(EnumRunning) (THIS_ LPENUMMONIKER FAR * ppenumMoniker ) PURE;
+};
+typedef IRunningObjectTable FAR* LPRUNNINGOBJECTTABLE;
+
+
+
+#undef INTERFACE
+#define INTERFACE IEnumMoniker
+
+DECLARE_INTERFACE_(IEnumMoniker, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IEnumOleDataObject methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt, LPMONIKER FAR* rgelt, ULONG FAR* pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumMoniker FAR* FAR* ppenm) PURE;
+};
+typedef IEnumMoniker FAR* LPENUMMONIKER;
+
+
+
+
+STDAPI BindMoniker(LPMONIKER pmk, DWORD grfOpt, REFIID iidResult, LPVOID FAR* ppvResult);
+STDAPI MkParseDisplayName(LPBC pbc, LPSTR szUserName,
+ ULONG FAR * pchEaten, LPMONIKER FAR * ppmk);
+STDAPI MonikerRelativePathTo(LPMONIKER pmkSrc, LPMONIKER pmkDest, LPMONIKER
+ FAR* ppmkRelPath, BOOL fCalledFromMethod);
+STDAPI MonikerCommonPrefixWith(LPMONIKER pmkThis, LPMONIKER pmkOther,
+ LPMONIKER FAR* ppmkCommon);
+STDAPI CreateBindCtx(DWORD reserved, LPBC FAR* ppbc);
+STDAPI CreateGenericComposite(LPMONIKER pmkFirst, LPMONIKER pmkRest,
+ LPMONIKER FAR* ppmkComposite);
+STDAPI GetClassFile (LPCSTR szFilename, CLSID FAR* pclsid);
+
+STDAPI CreateFileMoniker(LPSTR lpszPathName, LPMONIKER FAR* ppmk);
+STDAPI CreateItemMoniker(LPSTR lpszDelim, LPSTR lpszItem,
+ LPMONIKER FAR* ppmk);
+STDAPI CreateAntiMoniker(LPMONIKER FAR* ppmk);
+STDAPI CreatePointerMoniker(LPUNKNOWN punk, LPMONIKER FAR* ppmk);
+
+STDAPI GetRunningObjectTable( DWORD reserved, LPRUNNINGOBJECTTABLE FAR* pprot);
+
+
+#endif // _MONIKER_H_
diff --git a/private/oleauto/ole/win16/ole1cls.h b/private/oleauto/ole/win16/ole1cls.h
new file mode 100644
index 000000000..eeae62ba4
--- /dev/null
+++ b/private/oleauto/ole/win16/ole1cls.h
@@ -0,0 +1,141 @@
+/*****************************************************************************\
+* *
+* ole1cls.h - Master definition of GUIDs for OLE1 classes *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+/* This file is the master definition of all GUIDs for OLE1 classes.
+
+ All such GUIDs are of the form:
+
+ 0003xxxx-0000-0000-C000-000000000046
+
+ The last parameter to DEFINE_OLE1GUID is the old 1.0 class name,
+ i.e., its key in the registration database.
+
+ Do not remove or change GUIDs.
+
+ Do not add anything to this file except comments and DEFINE_OLE1GUID macros.
+*/
+
+#ifndef DEFINE_OLE1GUID
+#define DEFINE_OLE1GUID(a,b,c,d,e) DEFINE_OLEGUID (a,b,c,d)
+#endif
+
+DEFINE_OLE1GUID(CLSID_ExcelWorksheet, 0x00030000, 0, 0, "ExcelWorksheet");
+DEFINE_OLE1GUID(CLSID_ExcelChart, 0x00030001, 0, 0, "ExcelChart");
+DEFINE_OLE1GUID(CLSID_ExcelMacrosheet, 0x00030002, 0, 0, "ExcelMacrosheet");
+DEFINE_OLE1GUID(CLSID_WordDocument, 0x00030003, 0, 0, "WordDocument");
+DEFINE_OLE1GUID(CLSID_MSPowerPoint, 0x00030004, 0, 0, "MSPowerPoint");
+DEFINE_OLE1GUID(CLSID_MSPowerPointSho, 0x00030005, 0, 0, "MSPowerPointSho");
+DEFINE_OLE1GUID(CLSID_MSGraph, 0x00030006, 0, 0, "MSGraph");
+DEFINE_OLE1GUID(CLSID_MSDraw, 0x00030007, 0, 0, "MSDraw");
+DEFINE_OLE1GUID(CLSID_Note_It, 0x00030008, 0, 0, "Note-It");
+DEFINE_OLE1GUID(CLSID_WordArt, 0x00030009, 0, 0, "WordArt");
+DEFINE_OLE1GUID(CLSID_PBrush, 0x0003000a, 0, 0, "PBrush");
+DEFINE_OLE1GUID(CLSID_Equation, 0x0003000b, 0, 0, "Equation");
+DEFINE_OLE1GUID(CLSID_Package, 0x0003000c, 0, 0, "Package");
+DEFINE_OLE1GUID(CLSID_SoundRec, 0x0003000d, 0, 0, "SoundRec");
+DEFINE_OLE1GUID(CLSID_MPlayer, 0x0003000e, 0, 0, "MPlayer");
+
+/* test apps */
+DEFINE_OLE1GUID(CLSID_ServerDemo, 0x0003000f, 0, 0, "ServerDemo");
+DEFINE_OLE1GUID(CLSID_Srtest, 0x00030010, 0, 0, "Srtest");
+DEFINE_OLE1GUID(CLSID_SrtInv, 0x00030011, 0, 0, "SrtInv");
+DEFINE_OLE1GUID(CLSID_OleDemo, 0x00030012, 0, 0, "OleDemo");
+
+/* External ISVs */
+// Coromandel / Dorai Swamy / 718-793-7963
+DEFINE_OLE1GUID(CLSID_CoromandelIntegra, 0x00030013, 0, 0, "CoromandelIntegra");
+DEFINE_OLE1GUID(CLSID_CoromandelObjServer,0x00030014, 0, 0, "CoromandelObjServer");
+
+// 3-d Visions Corp / Peter Hirsch / 310-325-1339
+DEFINE_OLE1GUID(CLSID_StanfordGraphics, 0x00030015, 0, 0, "StanfordGraphics");
+
+// Deltapoint / Nigel Hearne / 408-648-4000
+DEFINE_OLE1GUID(CLSID_DGraphCHART, 0x00030016, 0, 0, "DGraphCHART");
+DEFINE_OLE1GUID(CLSID_DGraphDATA, 0x00030017, 0, 0, "DGraphDATA");
+
+// Corel / Richard V. Woodend / 613-728-8200 x1153
+DEFINE_OLE1GUID(CLSID_PhotoPaint, 0x00030018, 0, 0, "PhotoPaint");
+DEFINE_OLE1GUID(CLSID_CShow, 0x00030019, 0, 0, "CShow");
+DEFINE_OLE1GUID(CLSID_CorelChart, 0x0003001a, 0, 0, "CorelChart");
+DEFINE_OLE1GUID(CLSID_CDraw, 0x0003001b, 0, 0, "CDraw");
+
+// Inset Systems / Mark Skiba / 203-740-2400
+DEFINE_OLE1GUID(CLSID_HJWIN1_0, 0x0003001c, 0, 0, "HJWIN1.0");
+
+// Mark V Systems / Mark McGraw / 818-995-7671
+DEFINE_OLE1GUID(CLSID_ObjMakerOLE, 0x0003001d, 0, 0, "ObjMakerOLE");
+
+// IdentiTech / Mike Gilger / 407-951-9503
+DEFINE_OLE1GUID(CLSID_FYI, 0x0003001e, 0, 0, "FYI");
+DEFINE_OLE1GUID(CLSID_FYIView, 0x0003001f, 0, 0, "FYIView");
+
+// Inventa Corporation / Balaji Varadarajan / 408-987-0220
+DEFINE_OLE1GUID(CLSID_Stickynote, 0x00030020, 0, 0, "Stickynote");
+
+// ShapeWare Corp. / Lori Pearce / 206-467-6723
+DEFINE_OLE1GUID(CLSID_ShapewareVISIO10, 0x00030021, 0, 0, "ShapewareVISIO10");
+DEFINE_OLE1GUID(CLSID_ImportServer, 0x00030022, 0, 0, "ImportServer");
+
+
+// test app SrTest
+DEFINE_OLE1GUID(CLSID_SrvrTest, 0x00030023, 0, 0, "SrvrTest");
+
+// Special clsid for when a 1.0 client pastes an embedded object
+// that is a link.
+// **This CLSID is obsolete. Do not reuse number.
+//DEFINE_OLE1GUID(CLSID_10EmbedObj, 0x00030024, 0, 0, "OLE2_Embedded_Link");
+
+// test app ClTest. Doesn't really work as a server but is in reg db
+DEFINE_OLE1GUID(CLSID_ClTest, 0x00030025, 0, 0, "Cltest");
+
+// Microsoft ClipArt Gallery Sherry Larsen-Holmes
+DEFINE_OLE1GUID(CLSID_MS_ClipArt_Gallery,0x00030026, 0, 0, "MS_ClipArt_Gallery");
+
+// Microsoft Project Cory Reina
+DEFINE_OLE1GUID(CLSID_MSProject, 0x00030027, 0, 0, "MSProject");
+
+// Microsoft Works Chart
+DEFINE_OLE1GUID(CLSID_MSWorksChart, 0x00030028, 0, 0, "MSWorksChart");
+
+// Microsoft Works Spreadsheet
+DEFINE_OLE1GUID(CLSID_MSWorksSpreadsheet,0x00030029, 0, 0, "MSWorksSpreadsheet");
+
+// AFX apps - Dean McCrory
+DEFINE_OLE1GUID(CLSID_MinSvr, 0x0003002A, 0, 0, "MinSvr");
+DEFINE_OLE1GUID(CLSID_HierarchyList, 0x0003002B, 0, 0, "HierarchyList");
+DEFINE_OLE1GUID(CLSID_BibRef, 0x0003002C, 0, 0, "BibRef");
+DEFINE_OLE1GUID(CLSID_MinSvrMI, 0x0003002D, 0, 0, "MinSvrMI");
+DEFINE_OLE1GUID(CLSID_TestServ, 0x0003002E, 0, 0, "TestServ");
+
+// Ami Pro
+DEFINE_OLE1GUID(CLSID_AmiProDocument, 0x0003002F, 0, 0, "AmiProDocument");
+
+// WordPerfect Presentations For Windows
+DEFINE_OLE1GUID(CLSID_WPGraphics, 0x00030030, 0, 0, "WPGraphics");
+DEFINE_OLE1GUID(CLSID_WPCharts, 0x00030031, 0, 0, "WPCharts");
+
+
+// MicroGrafx Charisma
+DEFINE_OLE1GUID(CLSID_Charisma, 0x00030032, 0, 0, "Charisma");
+DEFINE_OLE1GUID(CLSID_Charisma_30, 0x00030033, 0, 0, "Charisma_30");
+DEFINE_OLE1GUID(CLSID_CharPres_30, 0x00030034, 0, 0, "CharPres_30");
+
+// MicroGrafx Draw
+DEFINE_OLE1GUID(CLSID_Draw, 0x00030035, 0, 0, "Draw");
+
+// MicroGrafx Designer
+DEFINE_OLE1GUID(CLSID_Designer_40, 0x00030036, 0, 0, "Designer_40");
+
+
+#undef DEFINE_OLE1GUID
+
+/* as we discover OLE 1 servers we will add them to the end of this list;
+ there is room for 64K of them!
+*/
diff --git a/private/oleauto/ole/win16/ole2.h b/private/oleauto/ole/win16/ole2.h
new file mode 100644
index 000000000..c5daea6f0
--- /dev/null
+++ b/private/oleauto/ole/win16/ole2.h
@@ -0,0 +1,1336 @@
+/*****************************************************************************\
+* *
+* ole2.h - Main OLE2 header; includes all subcomponents *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+
+#if !defined( _OLE2_H_ )
+#define _OLE2_H_
+
+#ifndef RC_INVOKED
+#pragma warning(disable:4001)
+#endif /* RC_INVOKED */
+
+#include <string.h>
+
+/****** Standard Object Definitions *****************************************/
+
+#include <compobj.h>
+
+
+// *************** FACILITY_ITF scodes common to all interfaces ************
+//
+// By convention, OLE interfaces divide the FACILITY_ITF range of errors
+// into nonoverlapping subranges. If an interface returns a FACILITY_ITF
+// scode, it must be from the range associated with that interface or from
+// the shared range: OLE_E_FIRST...OLE_E_LAST.
+//
+
+// error codes
+
+#define OLE_E_OLEVERB (OLE_E_FIRST)
+// invalid OLEVERB structure
+
+#define OLE_E_ADVF (OLE_E_FIRST+1)
+// invalid advise flags
+
+#define OLE_E_ENUM_NOMORE (OLE_E_FIRST+2)
+// you can't enuemrate any more, because the associated data is missing
+
+#define OLE_E_ADVISENOTSUPPORTED (OLE_E_FIRST+3)
+// this implementation doesn't take advises
+
+#define OLE_E_NOCONNECTION (OLE_E_FIRST+4)
+// there is no connection for this connection id
+
+#define OLE_E_NOTRUNNING (OLE_E_FIRST+5)
+// need run the object to perform this operation
+
+#define OLE_E_NOCACHE (OLE_E_FIRST+6)
+// there is no cache to operate on
+
+#define OLE_E_BLANK (OLE_E_FIRST+7)
+// Uninitialized object
+
+#define OLE_E_CLASSDIFF (OLE_E_FIRST+8)
+// linked object's source class has changed
+
+#define OLE_E_CANT_GETMONIKER (OLE_E_FIRST+9)
+// not able to get the moniker of the object
+
+#define OLE_E_CANT_BINDTOSOURCE (OLE_E_FIRST+10)
+// not able to bind to the source
+
+#define OLE_E_STATIC (OLE_E_FIRST+11)
+// object is static, operation not allowed
+
+#define OLE_E_PROMPTSAVECANCELLED (OLE_E_FIRST+12)
+// user cancelled out of save dialog
+
+#define OLE_E_INVALIDRECT (OLE_E_FIRST+13)
+// invalid rectangle
+
+#define OLE_E_WRONGCOMPOBJ (OLE_E_FIRST+14)
+// compobj.dll is too old for the ole2.dll initialized
+
+#define OLE_E_INVALIDHWND (OLE_E_FIRST+15)
+// invalid window handle
+
+#define OLE_E_NOT_INPLACEACTIVE (OLE_E_FIRST+16)
+// object is not in any of the inplace active states
+
+#define OLE_E_CANTCONVERT (OLE_E_FIRST+17)
+// not able to convert the object
+
+#define OLE_E_NOSTORAGE (OLE_E_FIRST+18)
+// not able to perform the operation because object is not given storage yet.
+
+
+#define DVGEN_E_FIRST (OLE_E_FIRST+100)
+
+#define DV_E_FORMATETC (DVGEN_E_FIRST)
+// invalid FORMATETC structure
+
+#define DV_E_DVTARGETDEVICE (DVGEN_E_FIRST+1)
+// invalid DVTARGETDEVICE structure
+
+#define DV_E_STGMEDIUM (DVGEN_E_FIRST+2)
+// invalid STDGMEDIUM structure
+
+#define DV_E_STATDATA (DVGEN_E_FIRST+3)
+// invalid STATDATA structure
+
+#define DV_E_LINDEX (DVGEN_E_FIRST+4)
+// invalid lindex
+
+#define DV_E_TYMED (DVGEN_E_FIRST+5)
+// invalid tymed
+
+#define DV_E_CLIPFORMAT (DVGEN_E_FIRST+6)
+// invalid clipboard format
+
+#define DV_E_DVASPECT (DVGEN_E_FIRST+7)
+// invalid aspect(s)
+
+#define DV_E_DVTARGETDEVICE_SIZE (DVGEN_E_FIRST+8)
+// tdSize paramter of the DVTARGETDEVICE structure is invalid
+
+#define DV_E_NOIVIEWOBJECT (DVGEN_E_FIRST+9)
+// object doesn't support IViewObject interface
+
+
+// Success codes
+
+#define OLE_S_USEREG (OLE_S_FIRST)
+// use the reg database to provide the requested info
+
+#define OLE_S_STATIC (OLE_S_FIRST+1)
+// success, but static
+
+#define OLE_S_MAC_CLIPFORMAT (OLE_S_FIRST+2)
+// macintosh clipboard format
+
+//*************************** Interface or API specific scodes *************
+
+// Errors for OleConvertOLESTREAMToIStorage and OleConvertIStorageToOLESTREAM
+
+// OLESTREAM Get method failed
+#define CONVERT10_E_OLESTREAM_GET (CONVERT10_E_FIRST + 0)
+
+// OLESTREAM Put method failed
+#define CONVERT10_E_OLESTREAM_PUT (CONVERT10_E_FIRST + 1)
+
+// Contents of the OLESTREAM not in correct format
+#define CONVERT10_E_OLESTREAM_FMT (CONVERT10_E_FIRST + 2)
+
+// There was in an error in a Windows GDI call while converting the bitmap
+// to a DIB.
+#define CONVERT10_E_OLESTREAM_BITMAP_TO_DIB (CONVERT10_E_FIRST + 3)
+
+// Contents of the IStorage not in correct format
+#define CONVERT10_E_STG_FMT (CONVERT10_E_FIRST + 4)
+
+// Contents of IStorage is missing one of the standard streams ("\1CompObj",
+// "\1Ole", "\2OlePres000"). This may be the storage for a DLL object, or a
+// class that does not use the def handler.
+#define CONVERT10_E_STG_NO_STD_STREAM (CONVERT10_E_FIRST + 5)
+
+// There was in an error in a Windows GDI call while converting the DIB
+// to a bitmap.
+#define CONVERT10_E_STG_DIB_TO_BITMAP (CONVERT10_E_FIRST + 6)
+
+
+// Returned by either API, this scode indicates that the original object
+// had no presentation, therefore the converted object does not either.
+#define CONVERT10_S_NO_PRESENTATION (CONVERT10_S_FIRST + 0)
+
+
+// Errors for Clipboard functions
+
+// OpenClipboard Failed
+#define CLIPBRD_E_CANT_OPEN (CLIPBRD_E_FIRST + 0)
+
+// EmptyClipboard Failed
+#define CLIPBRD_E_CANT_EMPTY (CLIPBRD_E_FIRST + 1)
+
+// SetClipboard Failed
+#define CLIPBRD_E_CANT_SET (CLIPBRD_E_FIRST + 2)
+
+// Data on clipboard is invalid
+#define CLIPBRD_E_BAD_DATA (CLIPBRD_E_FIRST + 3)
+
+// CloseClipboard Failed
+#define CLIPBRD_E_CANT_CLOSE (CLIPBRD_E_FIRST + 4)
+
+
+/****** OLE value types *****************************************************/
+
+/* rendering options */
+typedef enum tagOLERENDER
+{
+ OLERENDER_NONE = 0,
+ OLERENDER_DRAW = 1,
+ OLERENDER_FORMAT = 2,
+ OLERENDER_ASIS = 3
+} OLERENDER;
+typedef OLERENDER FAR* LPOLERENDER;
+
+// OLE verb; returned by IEnumOLEVERB
+typedef struct FARSTRUCT tagOLEVERB
+{
+ LONG lVerb;
+ LPSTR lpszVerbName;
+ DWORD fuFlags;
+ DWORD grfAttribs;
+} OLEVERB, FAR* LPOLEVERB;
+
+
+// Bitwise verb attributes used in OLEVERB.grfAttribs
+typedef enum tagOLEVERBATTRIB // bitwise
+{
+ OLEVERBATTRIB_NEVERDIRTIES = 1,
+ OLEVERBATTRIB_ONCONTAINERMENU = 2
+} OLEVERBATTRIB;
+
+
+// IOleObject::GetUserType optons; determines which form of the string to use
+typedef enum tagUSERCLASSTYPE
+{
+ USERCLASSTYPE_FULL = 1,
+ USERCLASSTYPE_SHORT= 2,
+ USERCLASSTYPE_APPNAME= 3,
+} USERCLASSTYPE;
+
+
+// bits returned from IOleObject::GetMistStatus
+typedef enum tagOLEMISC // bitwise
+{
+ OLEMISC_RECOMPOSEONRESIZE = 1,
+ OLEMISC_ONLYICONIC = 2,
+ OLEMISC_INSERTNOTREPLACE = 4,
+ OLEMISC_STATIC = 8,
+ OLEMISC_CANTLINKINSIDE = 16,
+ OLEMISC_CANLINKBYOLE1 = 32,
+ OLEMISC_ISLINKOBJECT = 64,
+ OLEMISC_INSIDEOUT = 128,
+ OLEMISC_ACTIVATEWHENVISIBLE = 256,
+ OLEMISC_RENDERINGISDEVICEINDEPENDENT = 512
+} OLEMISC;
+
+
+// IOleObject::Close options
+typedef enum tagOLECLOSE
+{
+ OLECLOSE_SAVEIFDIRTY = 0,
+ OLECLOSE_NOSAVE = 1,
+ OLECLOSE_PROMPTSAVE = 2
+} OLECLOSE;
+
+
+// IOleObject::GetMoniker and IOleClientSite::GetMoniker options; determines
+// if and how monikers should be assigned.
+typedef enum tagOLEGETMONIKER
+{
+ OLEGETMONIKER_ONLYIFTHERE=1,
+ OLEGETMONIKER_FORCEASSIGN=2,
+ OLEGETMONIKER_UNASSIGN=3,
+ OLEGETMONIKER_TEMPFORUSER=4
+} OLEGETMONIKER;
+
+
+// IOleObject::GetMoniker, IOleObject::SetMoniker and
+// IOleClientSite::GetMoniker options; determines which moniker to use
+typedef enum tagOLEWHICHMK
+{
+ OLEWHICHMK_CONTAINER=1,
+ OLEWHICHMK_OBJREL=2,
+ OLEWHICHMK_OBJFULL=3
+} OLEWHICHMK;
+
+
+#ifdef WIN32
+#define LPSIZEL PSIZEL
+#else
+typedef struct FARSTRUCT tagSIZEL
+{
+ long cx;
+ long cy;
+} SIZEL, FAR* LPSIZEL;
+#endif
+
+
+#ifdef WIN32
+#define LPRECTL PRECTL
+#else
+typedef struct FARSTRUCT tagRECTL
+{
+ long left;
+ long top;
+ long right;
+ long bottom;
+} RECTL, FAR* LPRECTL;
+
+typedef struct FARSTRUCT tagPOINTL {
+ LONG x;
+ LONG y;
+} POINTL;
+
+#endif
+
+
+#ifndef LPCRECT
+typedef const RECT FAR* LPCRECT;
+#endif
+
+#ifndef LPCRECTL
+typedef const RECTL FAR* LPCRECTL;
+#endif
+
+
+// for OleCreateEmbeddingHelper flags; roles in low word; options in high word
+#define EMBDHLP_INPROC_HANDLER 0x0000L // role is handler; implementation is
+ // default handler; pCF can be NULL
+#define EMBDHLP_INPROC_SERVER 0x0001L // role is server; pCF can't be NULL
+
+#define EMBDHLP_CREATENOW 0x00000000L // create using pCF immediately; if pCF
+ // is NULL, uses std remoting handler
+#define EMBDHLP_DELAYCREATE 0x00010000L // delayed create; must supply pCF
+
+
+// NOTE: OleCreateEmbeddingHelper(clsid, pUnkOuter,
+// EMBDHLP_INPROC_HANDLER | EMBDHLP_CREATENOW, NULL, riid, lplpObj)
+// is the same as OleCreateDefaultHandler(clsid, pUnkOuter, riid, lplpObj);
+// i.e., the embedding helper is the default handler in various roles.
+
+
+/***** OLE 1.0 OLESTREAM declarations *************************************/
+
+typedef struct _OLESTREAM FAR* LPOLESTREAM;
+
+typedef struct _OLESTREAMVTBL
+{
+ DWORD (CALLBACK* Get)(LPOLESTREAM, void FAR*, DWORD);
+ DWORD (CALLBACK* Put)(LPOLESTREAM, const void FAR*, DWORD);
+} OLESTREAMVTBL;
+typedef OLESTREAMVTBL FAR* LPOLESTREAMVTBL;
+
+typedef struct _OLESTREAM
+{
+ LPOLESTREAMVTBL lpstbl;
+} OLESTREAM;
+
+
+/****** Clipboard Data structures *****************************************/
+
+typedef struct tagOBJECTDESCRIPTOR
+{
+ ULONG cbSize; // Size of structure in bytes
+ CLSID clsid; // CLSID of data being transferred
+ DWORD dwDrawAspect; // Display aspect of the object
+ // normally DVASPECT_CONTENT or ICON.
+ // dwDrawAspect will be 0 (which is NOT
+ // DVASPECT_CONTENT) if the copier or
+ // dragsource didn't draw the object to
+ // begin with.
+ SIZEL sizel; // size of the object in HIMETRIC
+ // sizel is opt.: will be (0,0) for apps
+ // which don't draw the object being
+ // transferred
+ POINTL pointl; // Offset in HIMETRIC units from the
+ // upper-left corner of the obj where the
+ // mouse went down for the drag.
+ // NOTE: y coordinates increase downward.
+ // x coordinates increase to right
+ // pointl is opt.; it is only meaningful
+ // if object is transfered via drag/drop.
+ // (0, 0) if mouse position is unspecified
+ // (eg. when obj transfered via clipboard)
+ DWORD dwStatus; // Misc. status flags for object. Flags are
+ // defined by OLEMISC enum. these flags
+ // are as would be returned
+ // by IOleObject::GetMiscStatus.
+ DWORD dwFullUserTypeName; // Offset from beginning of structure to
+ // null-terminated string that specifies
+ // Full User Type Name of the object.
+ // 0 indicates string not present.
+ DWORD dwSrcOfCopy; // Offset from beginning of structure to
+ // null-terminated string that specifies
+ // source of the transfer.
+ // dwSrcOfCOpy is normally implemented as
+ // the display name of the temp-for-user
+ // moniker which identifies the source of
+ // the data.
+ // 0 indicates string not present.
+ // NOTE: moniker assignment is NOT forced.
+ // see IOleObject::GetMoniker(
+ // OLEGETMONIKER_TEMPFORUSER)
+
+ /* variable sized string data may appear here */
+
+} OBJECTDESCRIPTOR, *POBJECTDESCRIPTOR, FAR *LPOBJECTDESCRIPTOR,
+ LINKSRCDESCRIPTOR, *PLINKSRCDESCRIPTOR, FAR *LPLINKSRCDESCRIPTOR;
+
+
+
+/* verbs */
+#define OLEIVERB_PRIMARY (0L)
+#define OLEIVERB_SHOW (-1L)
+#define OLEIVERB_OPEN (-2L)
+#define OLEIVERB_HIDE (-3L)
+#define OLEIVERB_UIACTIVATE (-4L)
+#define OLEIVERB_INPLACEACTIVATE (-5L)
+#define OLEIVERB_DISCARDUNDOSTATE (-6L)
+
+
+// forward type declarations
+#if defined(__cplusplus)
+interface IOleClientSite;
+interface IOleContainer;
+interface IOleObject;
+#else
+typedef interface IOleClientSite IOleClientSite;
+typedef interface IOleContainer IOleContainer;
+typedef interface IOleObject IOleObject;
+#endif
+
+typedef IOleObject FAR* LPOLEOBJECT;
+typedef IOleClientSite FAR* LPOLECLIENTSITE;
+typedef IOleContainer FAR* LPOLECONTAINER;
+
+
+/****** OLE GUIDs *********************************************************/
+
+#ifndef INITGUID
+#include "oleguid.h"
+#endif
+
+
+/****** Other Major Interfaces ********************************************/
+
+#include <dvobj.h>
+
+#include <storage.h>
+
+
+
+/****** IDrop??? Interfaces ********************************************/
+
+#define MK_ALT 0x0020
+
+
+#define DROPEFFECT_NONE 0
+#define DROPEFFECT_COPY 1
+#define DROPEFFECT_MOVE 2
+#define DROPEFFECT_LINK 4
+#define DROPEFFECT_SCROLL 0x80000000
+
+// default inset-width of the hot zone, in pixels
+// typical use: GetProfileInt("windows","DragScrollInset",DD_DEFSCROLLINSET)
+#define DD_DEFSCROLLINSET 11
+
+// default delay before scrolling, in milliseconds
+// typical use: GetProfileInt("windows","DragScrollDelay",DD_DEFSCROLLDELAY)
+#define DD_DEFSCROLLDELAY 50
+
+// default scroll interval, in milliseconds
+// typical use: GetProfileInt("windows","DragScrollInterval",
+// DD_DEFSCROLLINTERVAL)
+#define DD_DEFSCROLLINTERVAL 50
+
+// default delay before dragging should start, in milliseconds
+// typical use: GetProfileInt("windows", "DragDelay", DD_DEFDRAGDELAY)
+#define DD_DEFDRAGDELAY 200
+
+// default minimum distance (radius) before dragging should start, in pixels
+// typical use: GetProfileInt("windows", "DragMinDist", DD_DEFDRAGMINDIST)
+#define DD_DEFDRAGMINDIST 2
+
+
+
+/* Dragdrop specific error codes */
+
+#define DRAGDROP_E_NOTREGISTERED (DRAGDROP_E_FIRST)
+// trying to revoke a drop target that has not been registered
+
+#define DRAGDROP_E_ALREADYREGISTERED (DRAGDROP_E_FIRST+1)
+// this window has already been registered as a drop target
+
+#define DRAGDROP_E_INVALIDHWND (DRAGDROP_E_FIRST+2)
+// invalid HWND
+
+
+#define DRAGDROP_S_DROP (DRAGDROP_S_FIRST + 0)
+// successful drop took place
+
+#define DRAGDROP_S_CANCEL (DRAGDROP_S_FIRST + 1)
+// drag-drop operation canceled
+
+#define DRAGDROP_S_USEDEFAULTCURSORS (DRAGDROP_S_FIRST + 2)
+// use the default cursor
+
+
+#undef INTERFACE
+#define INTERFACE IDropTarget
+
+DECLARE_INTERFACE_(IDropTarget, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IDropTarget methods ***
+ STDMETHOD(DragEnter) (THIS_ LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) PURE;
+ STDMETHOD(DragOver) (THIS_ DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) PURE;
+ STDMETHOD(DragLeave) (THIS) PURE;
+ STDMETHOD(Drop) (THIS_ LPDATAOBJECT pDataObj, DWORD grfKeyState, POINTL pt, LPDWORD pdwEffect) PURE;
+};
+typedef IDropTarget FAR* LPDROPTARGET;
+
+
+
+#undef INTERFACE
+#define INTERFACE IDropSource
+
+DECLARE_INTERFACE_(IDropSource, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IDropSource methods ***
+ STDMETHOD(QueryContinueDrag) (THIS_ BOOL fEscapePressed, DWORD grfKeyState) PURE;
+ STDMETHOD(GiveFeedback) (THIS_ DWORD dwEffect) PURE;
+};
+typedef IDropSource FAR* LPDROPSOURCE;
+
+
+
+/****** IPersist??? Interfaces ********************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IPersist
+
+DECLARE_INTERFACE_(IPersist, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IPersist methods ***
+ STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE;
+};
+typedef IPersist FAR* LPPERSIST;
+
+
+
+#undef INTERFACE
+#define INTERFACE IPersistStorage
+
+DECLARE_INTERFACE_(IPersistStorage, IPersist)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IPersist methods ***
+ STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE;
+
+ // *** IPersistStorage methods ***
+ STDMETHOD(IsDirty) (THIS) PURE;
+ STDMETHOD(InitNew) (THIS_ LPSTORAGE pStg) PURE;
+ STDMETHOD(Load) (THIS_ LPSTORAGE pStg) PURE;
+ STDMETHOD(Save) (THIS_ LPSTORAGE pStgSave, BOOL fSameAsLoad) PURE;
+ STDMETHOD(SaveCompleted) (THIS_ LPSTORAGE pStgNew) PURE;
+ STDMETHOD(HandsOffStorage) (THIS) PURE;
+};
+typedef IPersistStorage FAR* LPPERSISTSTORAGE;
+
+
+
+#undef INTERFACE
+#define INTERFACE IPersistStream
+
+DECLARE_INTERFACE_(IPersistStream, IPersist)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IPersist methods ***
+ STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE;
+
+ // *** IPersistStream methods ***
+ STDMETHOD(IsDirty) (THIS) PURE;
+ STDMETHOD(Load) (THIS_ LPSTREAM pStm) PURE;
+ STDMETHOD(Save) (THIS_ LPSTREAM pStm,
+ BOOL fClearDirty) PURE;
+ STDMETHOD(GetSizeMax) (THIS_ ULARGE_INTEGER FAR* pcbSize) PURE;
+};
+typedef IPersistStream FAR* LPPERSISTSTREAM;
+
+
+
+#undef INTERFACE
+#define INTERFACE IPersistFile
+
+DECLARE_INTERFACE_(IPersistFile, IPersist)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IPersist methods ***
+ STDMETHOD(GetClassID) (THIS_ LPCLSID lpClassID) PURE;
+
+ // *** IPersistFile methods ***
+ STDMETHOD(IsDirty) (THIS) PURE;
+ STDMETHOD(Load) (THIS_ LPCSTR lpszFileName, DWORD grfMode) PURE;
+ STDMETHOD(Save) (THIS_ LPCSTR lpszFileName, BOOL fRemember) PURE;
+ STDMETHOD(SaveCompleted) (THIS_ LPCSTR lpszFileName) PURE;
+ STDMETHOD(GetCurFile) (THIS_ LPSTR FAR* lplpszFileName) PURE;
+};
+typedef IPersistFile FAR* LPPERSISTFILE;
+
+
+/****** Moniker Object Interfaces ******************************************/
+
+#include <moniker.h>
+
+
+/****** OLE Object Interfaces ******************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IEnumOLEVERB
+
+DECLARE_INTERFACE_(IEnumOLEVERB, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IEnumOLEVERB methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt, LPOLEVERB rgelt, ULONG FAR* pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumOLEVERB FAR* FAR* ppenm) PURE;
+};
+typedef IEnumOLEVERB FAR* LPENUMOLEVERB;
+
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleObject
+
+#define OLEOBJ_E_NOVERBS (OLEOBJ_E_FIRST + 0)
+
+#define OLEOBJ_E_INVALIDVERB (OLEOBJ_E_FIRST + 1)
+
+#define OLEOBJ_S_INVALIDVERB (OLEOBJ_S_FIRST + 0)
+
+#define OLEOBJ_S_CANNOT_DOVERB_NOW (OLEOBJ_S_FIRST + 1)
+// verb number is valid but verb cannot be done now, for instance
+// hiding a link or hiding a visible OLE 1.0 server
+
+#define OLEOBJ_S_INVALIDHWND (OLEOBJ_S_FIRST + 2)
+// invalid hwnd passed
+
+
+DECLARE_INTERFACE_(IOleObject, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleObject methods ***
+ STDMETHOD(SetClientSite) (THIS_ LPOLECLIENTSITE pClientSite) PURE;
+ STDMETHOD(GetClientSite) (THIS_ LPOLECLIENTSITE FAR* ppClientSite) PURE;
+ STDMETHOD(SetHostNames) (THIS_ LPCSTR szContainerApp, LPCSTR szContainerObj) PURE;
+ STDMETHOD(Close) (THIS_ DWORD dwSaveOption) PURE;
+ STDMETHOD(SetMoniker) (THIS_ DWORD dwWhichMoniker, LPMONIKER pmk) PURE;
+ STDMETHOD(GetMoniker) (THIS_ DWORD dwAssign, DWORD dwWhichMoniker,
+ LPMONIKER FAR* ppmk) PURE;
+ STDMETHOD(InitFromData) (THIS_ LPDATAOBJECT pDataObject,
+ BOOL fCreation,
+ DWORD dwReserved) PURE;
+ STDMETHOD(GetClipboardData) (THIS_ DWORD dwReserved,
+ LPDATAOBJECT FAR* ppDataObject) PURE;
+ STDMETHOD(DoVerb) (THIS_ LONG iVerb,
+ LPMSG lpmsg,
+ LPOLECLIENTSITE pActiveSite,
+ LONG lindex,
+ HWND hwndParent,
+ LPCRECT lprcPosRect) PURE;
+ STDMETHOD(EnumVerbs) (THIS_ LPENUMOLEVERB FAR* ppenumOleVerb) PURE;
+ STDMETHOD(Update) (THIS) PURE;
+ STDMETHOD(IsUpToDate) (THIS) PURE;
+ STDMETHOD(GetUserClassID) (THIS_ CLSID FAR* pClsid) PURE;
+ STDMETHOD(GetUserType) (THIS_ DWORD dwFormOfType, LPSTR FAR* pszUserType) PURE;
+ STDMETHOD(SetExtent) (THIS_ DWORD dwDrawAspect, LPSIZEL lpsizel) PURE;
+ STDMETHOD(GetExtent) (THIS_ DWORD dwDrawAspect, LPSIZEL lpsizel) PURE;
+
+ STDMETHOD(Advise)(THIS_ LPADVISESINK pAdvSink, DWORD FAR* pdwConnection) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD dwConnection) PURE;
+ STDMETHOD(EnumAdvise) (THIS_ LPENUMSTATDATA FAR* ppenumAdvise) PURE;
+ STDMETHOD(GetMiscStatus) (THIS_ DWORD dwAspect, DWORD FAR* pdwStatus) PURE;
+ STDMETHOD(SetColorScheme) (THIS_ LPLOGPALETTE lpLogpal) PURE;
+};
+typedef IOleObject FAR* LPOLEOBJECT;
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleClientSite
+
+DECLARE_INTERFACE_(IOleClientSite, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleClientSite methods ***
+ STDMETHOD(SaveObject) (THIS) PURE;
+ STDMETHOD(GetMoniker) (THIS_ DWORD dwAssign, DWORD dwWhichMoniker,
+ LPMONIKER FAR* ppmk) PURE;
+ STDMETHOD(GetContainer) (THIS_ LPOLECONTAINER FAR* ppContainer) PURE;
+ STDMETHOD(ShowObject) (THIS) PURE;
+ STDMETHOD(OnShowWindow) (THIS_ BOOL fShow) PURE;
+ STDMETHOD(RequestNewObjectLayout) (THIS) PURE;
+};
+typedef IOleClientSite FAR* LPOLECLIENTSITE;
+
+
+/****** OLE Runnable Object Interface **********************************/
+
+#undef INTERFACE
+#define INTERFACE IRunnableObject
+
+DECLARE_INTERFACE_(IRunnableObject, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IRunnableObject methods ***
+ STDMETHOD(GetRunningClass) (THIS_ LPCLSID lpClsid) PURE;
+ STDMETHOD(Run) (THIS_ LPBINDCTX pbc) PURE;
+ STDMETHOD_(BOOL, IsRunning) (THIS) PURE;
+ STDMETHOD(LockRunning)(THIS_ BOOL fLock, BOOL fLastUnlockCloses) PURE;
+ STDMETHOD(SetContainedObject)(THIS_ BOOL fContained) PURE;
+};
+typedef IRunnableObject FAR* LPRUNNABLEOBJECT;
+
+
+/****** OLE Container Interfaces ***************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IParseDisplayName
+
+DECLARE_INTERFACE_(IParseDisplayName, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IParseDisplayName method ***
+ STDMETHOD(ParseDisplayName) (THIS_ LPBC pbc, LPSTR lpszDisplayName,
+ ULONG FAR* pchEaten, LPMONIKER FAR* ppmkOut) PURE;
+};
+typedef IParseDisplayName FAR* LPPARSEDISPLAYNAME;
+
+
+#undef INTERFACE
+#define INTERFACE IOleContainer
+
+DECLARE_INTERFACE_(IOleContainer, IParseDisplayName)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IParseDisplayName method ***
+ STDMETHOD(ParseDisplayName) (THIS_ LPBC pbc, LPSTR lpszDisplayName,
+ ULONG FAR* pchEaten, LPMONIKER FAR* ppmkOut) PURE;
+
+ // *** IOleContainer methods ***
+ STDMETHOD(EnumObjects) ( DWORD grfFlags, LPENUMUNKNOWN FAR* ppenumUnknown) PURE;
+ STDMETHOD(LockContainer) (THIS_ BOOL fLock) PURE;
+};
+typedef IOleContainer FAR* LPOLECONTAINER;
+
+
+typedef enum tagBINDSPEED
+{
+ BINDSPEED_INDEFINITE = 1,
+ BINDSPEED_MODERATE = 2,
+ BINDSPEED_IMMEDIATE = 3
+} BINDSPEED;
+
+typedef enum tagOLECONTF
+{
+ OLECONTF_EMBEDDINGS = 1,
+ OLECONTF_LINKS = 2,
+ OLECONTF_OTHERS = 4,
+ OLECONTF_ONLYUSER = 8,
+ OLECONTF_ONLYIFRUNNING = 16
+} OLECONTF;
+
+
+#undef INTERFACE
+#define INTERFACE IOleItemContainer
+
+DECLARE_INTERFACE_(IOleItemContainer, IOleContainer)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IParseDisplayName method ***
+ STDMETHOD(ParseDisplayName) (THIS_ LPBC pbc, LPSTR lpszDisplayName,
+ ULONG FAR* pchEaten, LPMONIKER FAR* ppmkOut) PURE;
+
+ // *** IOleContainer methods ***
+ STDMETHOD(EnumObjects) (THIS_ DWORD grfFlags, LPENUMUNKNOWN FAR* ppenumUnknown) PURE;
+ STDMETHOD(LockContainer) (THIS_ BOOL fLock) PURE;
+
+ // *** IOleItemContainer methods ***
+ STDMETHOD(GetObject) (THIS_ LPSTR lpszItem, DWORD dwSpeedNeeded,
+ LPBINDCTX pbc, REFIID riid, LPVOID FAR* ppvObject) PURE;
+ STDMETHOD(GetObjectStorage) (THIS_ LPSTR lpszItem, LPBINDCTX pbc,
+ REFIID riid, LPVOID FAR* ppvStorage) PURE;
+ STDMETHOD(IsRunning) (THIS_ LPSTR lpszItem) PURE;
+};
+typedef IOleItemContainer FAR* LPOLEITEMCONTAINER;
+
+
+/****** OLE Advise Holder Interface ***************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IOleAdviseHolder
+
+DECLARE_INTERFACE_(IOleAdviseHolder, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppv) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleAdviseHolder methods ***
+ STDMETHOD(Advise)(THIS_ LPADVISESINK pAdvise, DWORD FAR* pdwConnection) PURE;
+ STDMETHOD(Unadvise)(THIS_ DWORD dwConnection) PURE;
+ STDMETHOD(EnumAdvise)(THIS_ LPENUMSTATDATA FAR* ppenumAdvise) PURE;
+
+ STDMETHOD(SendOnRename)(THIS_ LPMONIKER pmk) PURE;
+ STDMETHOD(SendOnSave)(THIS) PURE;
+ STDMETHOD(SendOnClose)(THIS) PURE;
+};
+typedef IOleAdviseHolder FAR* LPOLEADVISEHOLDER;
+
+
+/****** OLE Link Interface ************************************************/
+
+/* Link update options */
+typedef enum tagOLEUPDATE
+{
+ OLEUPDATE_ALWAYS=1,
+ OLEUPDATE_ONCALL=3
+} OLEUPDATE;
+typedef OLEUPDATE FAR* LPOLEUPDATE;
+
+
+// for IOleLink::BindToSource
+typedef enum tagOLELINKBIND
+{
+ OLELINKBIND_EVENIFCLASSDIFF = 1,
+} OLELINKBIND;
+
+
+#undef INTERFACE
+#define INTERFACE IOleLink
+
+DECLARE_INTERFACE_(IOleLink, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleLink methods ***
+ STDMETHOD(SetUpdateOptions) (THIS_ DWORD dwUpdateOpt) PURE;
+ STDMETHOD(GetUpdateOptions) (THIS_ LPDWORD pdwUpdateOpt) PURE;
+ STDMETHOD(SetSourceMoniker) (THIS_ LPMONIKER pmk, REFCLSID rclsid) PURE;
+ STDMETHOD(GetSourceMoniker) (THIS_ LPMONIKER FAR* ppmk) PURE;
+ STDMETHOD(SetSourceDisplayName) (THIS_ LPCSTR lpszDisplayName) PURE;
+ STDMETHOD(GetSourceDisplayName) (THIS_ LPSTR FAR* lplpszDisplayName) PURE;
+ STDMETHOD(BindToSource) (THIS_ DWORD bindflags, LPBINDCTX pbc) PURE;
+ STDMETHOD(BindIfRunning) (THIS) PURE;
+ STDMETHOD(GetBoundSource) (THIS_ LPUNKNOWN FAR* ppUnk) PURE;
+ STDMETHOD(UnbindSource) (THIS) PURE;
+ STDMETHOD(Update) (THIS_ LPBINDCTX pbc) PURE;
+};
+typedef IOleLink FAR* LPOLELINK;
+
+
+/****** OLE InPlace Editing Interfaces ************************************/
+
+#ifdef _MAC
+typedef Handle HOLEMENU;
+typedef long SIZE;
+typedef long HACCEL;
+#else
+DECLARE_HANDLE(HOLEMENU);
+#endif
+
+typedef struct FARSTRUCT tagOIFI // OleInPlaceFrameInfo
+{
+ UINT cb;
+ BOOL fMDIApp;
+ HWND hwndFrame;
+ HACCEL haccel;
+ int cAccelEntries;
+} OLEINPLACEFRAMEINFO, FAR* LPOLEINPLACEFRAMEINFO;
+
+
+typedef struct FARSTRUCT tagOleMenuGroupWidths
+{
+ LONG width[6];
+} OLEMENUGROUPWIDTHS, FAR* LPOLEMENUGROUPWIDTHS;
+
+typedef RECT BORDERWIDTHS;
+typedef LPRECT LPBORDERWIDTHS;
+typedef LPCRECT LPCBORDERWIDTHS;
+
+/* Inplace editing specific error codes */
+
+#define INPLACE_E_NOTUNDOABLE (INPLACE_E_FIRST)
+// undo is not avaiable
+
+#define INPLACE_E_NOTOOLSPACE (INPLACE_E_FIRST+1)
+// Space for tools is not available
+
+#define INPLACE_S_TRUNCATED (INPLACE_S_FIRST)
+// Message is too long, some of it had to be truncated before displaying
+
+//misc definitions
+#define INPLACE_DEFBORDERWIDTH 4
+
+// forward type declarations
+#if defined(__cplusplus)
+interface IOleInPlaceUIWindow;
+#else
+typedef interface IOleInPlaceUIWindow IOleInPlaceUIWindow;
+#endif
+
+typedef IOleInPlaceUIWindow FAR* LPOLEINPLACEUIWINDOW;
+
+
+#undef INTERFACE
+#define INTERFACE IOleWindow
+
+DECLARE_INTERFACE_(IOleWindow, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleWindow methods ***
+ STDMETHOD(GetWindow) (THIS_ HWND FAR* lphwnd) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
+};
+
+typedef IOleWindow FAR* LPOLEWINDOW;
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleInPlaceObject
+
+DECLARE_INTERFACE_(IOleInPlaceObject, IOleWindow)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleWindow methods ***
+ STDMETHOD(GetWindow) (THIS_ HWND FAR* lphwnd) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
+
+ // *** IOleInPlaceObject methods ***
+ STDMETHOD(InPlaceDeactivate) (THIS) PURE;
+ STDMETHOD(UIDeactivate) (THIS) PURE;
+ STDMETHOD(SetObjectRects) (THIS_ LPCRECT lprcPosRect,
+ LPCRECT lprcClipRect) PURE;
+ STDMETHOD(ReactivateAndUndo) (THIS) PURE;
+};
+typedef IOleInPlaceObject FAR* LPOLEINPLACEOBJECT;
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleInPlaceActiveObject
+
+DECLARE_INTERFACE_(IOleInPlaceActiveObject, IOleWindow)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleWindow methods ***
+ STDMETHOD(GetWindow) (THIS_ HWND FAR* lphwnd) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
+
+ // *** IOleInPlaceActiveObject methods ***
+ STDMETHOD(TranslateAccelerator) (THIS_ LPMSG lpmsg) PURE;
+ STDMETHOD(OnFrameWindowActivate) (THIS_ BOOL fActivate) PURE;
+ STDMETHOD(OnDocWindowActivate) (THIS_ BOOL fActivate) PURE;
+ STDMETHOD(ResizeBorder) (THIS_ LPCRECT lprectBorder, LPOLEINPLACEUIWINDOW lpUIWindow, BOOL fFrameWindow) PURE;
+ STDMETHOD(EnableModeless) (THIS_ BOOL fEnable) PURE;
+};
+typedef IOleInPlaceActiveObject FAR* LPOLEINPLACEACTIVEOBJECT;
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleInPlaceUIWindow
+
+DECLARE_INTERFACE_(IOleInPlaceUIWindow, IOleWindow)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleWindow methods ***
+ STDMETHOD(GetWindow) (THIS_ HWND FAR* lphwnd) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
+
+ // *** IOleInPlaceUIWindow methods ***
+ STDMETHOD(GetBorder) (THIS_ LPRECT lprectBorder) PURE;
+ STDMETHOD(RequestBorderSpace) (THIS_ LPCBORDERWIDTHS lpborderwidths) PURE;
+ STDMETHOD(SetBorderSpace) (THIS_ LPCBORDERWIDTHS lpborderwidths) PURE;
+ STDMETHOD(SetActiveObject) (THIS_ LPOLEINPLACEACTIVEOBJECT lpActiveObject,
+ LPCSTR lpszObjName) PURE;
+};
+typedef IOleInPlaceUIWindow FAR* LPOLEINPLACEUIWINDOW;
+
+
+
+#undef INTERFACE
+#define INTERFACE IOleInPlaceFrame
+
+DECLARE_INTERFACE_(IOleInPlaceFrame, IOleInPlaceUIWindow)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleWindow methods ***
+ STDMETHOD(GetWindow) (THIS_ HWND FAR* lphwnd) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
+
+ // *** IOleInPlaceUIWindow methods ***
+ STDMETHOD(GetBorder) (THIS_ LPRECT lprectBorder) PURE;
+ STDMETHOD(RequestBorderSpace) (THIS_ LPCBORDERWIDTHS lpborderwidths) PURE;
+ STDMETHOD(SetBorderSpace) (THIS_ LPCBORDERWIDTHS lpborderwidths) PURE;
+ STDMETHOD(SetActiveObject) (THIS_ LPOLEINPLACEACTIVEOBJECT lpActiveObject,
+ LPCSTR lpszObjName) PURE;
+
+
+ // *** IOleInPlaceFrame methods ***
+ STDMETHOD(InsertMenus) (THIS_ HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) PURE;
+ STDMETHOD(SetMenu) (THIS_ HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject) PURE;
+ STDMETHOD(RemoveMenus) (THIS_ HMENU hmenuShared) PURE;
+ STDMETHOD(SetStatusText) (THIS_ LPCSTR lpszStatusText) PURE;
+ STDMETHOD(EnableModeless) (THIS_ BOOL fEnable) PURE;
+ STDMETHOD(TranslateAccelerator) (THIS_ LPMSG lpmsg, WORD wID) PURE;
+};
+typedef IOleInPlaceFrame FAR* LPOLEINPLACEFRAME;
+
+
+#undef INTERFACE
+#define INTERFACE IOleInPlaceSite
+
+DECLARE_INTERFACE_(IOleInPlaceSite, IOleWindow)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IOleWindow methods ***
+ STDMETHOD(GetWindow) (THIS_ HWND FAR* lphwnd) PURE;
+ STDMETHOD(ContextSensitiveHelp) (THIS_ BOOL fEnterMode) PURE;
+
+ // *** IOleInPlaceSite methods ***
+ STDMETHOD(CanInPlaceActivate) (THIS) PURE;
+ STDMETHOD(OnInPlaceActivate) (THIS) PURE;
+ STDMETHOD(OnUIActivate) (THIS) PURE;
+ STDMETHOD(GetWindowContext) (THIS_ LPOLEINPLACEFRAME FAR* lplpFrame,
+ LPOLEINPLACEUIWINDOW FAR* lplpDoc,
+ LPRECT lprcPosRect,
+ LPRECT lprcClipRect,
+ LPOLEINPLACEFRAMEINFO lpFrameInfo) PURE;
+ STDMETHOD(Scroll) (THIS_ SIZE scrollExtent) PURE;
+ STDMETHOD(OnUIDeactivate) (THIS_ BOOL fUndoable) PURE;
+ STDMETHOD(OnInPlaceDeactivate) (THIS) PURE;
+ STDMETHOD(DiscardUndoState) (THIS) PURE;
+ STDMETHOD(DeactivateAndUndo) (THIS) PURE;
+ STDMETHOD(OnPosRectChange) (THIS_ LPCRECT lprcPosRect) PURE;
+};
+typedef IOleInPlaceSite FAR* LPOLEINPLACESITE;
+
+
+
+/****** OLE API Prototypes ************************************************/
+
+STDAPI_(DWORD) OleBuildVersion( VOID );
+
+/* helper functions */
+STDAPI ReadClassStg(LPSTORAGE pStg, CLSID FAR* pclsid);
+STDAPI WriteClassStg(LPSTORAGE pStg, REFCLSID rclsid);
+STDAPI ReadClassStm(LPSTREAM pStm, CLSID FAR* pclsid);
+STDAPI WriteClassStm(LPSTREAM pStm, REFCLSID rclsid);
+STDAPI WriteFmtUserTypeStg (LPSTORAGE pstg, CLIPFORMAT cf, LPSTR lpszUserType);
+STDAPI ReadFmtUserTypeStg (LPSTORAGE pstg, CLIPFORMAT FAR* pcf, LPSTR FAR* lplpszUserType);
+
+
+/* init/term */
+
+STDAPI OleInitialize(LPMALLOC pMalloc);
+STDAPI_(void) OleUninitialize(void);
+
+
+/* APIs to query whether (Embedded/Linked) object can be created from
+ the data object */
+
+STDAPI OleQueryLinkFromData(LPDATAOBJECT pSrcDataObject);
+STDAPI OleQueryCreateFromData(LPDATAOBJECT pSrcDataObject);
+
+
+/* Object creation APIs */
+
+STDAPI OleCreate(REFCLSID rclsid, REFIID riid, DWORD renderopt,
+ LPFORMATETC pFormatEtc, LPOLECLIENTSITE pClientSite,
+ LPSTORAGE pStg, LPVOID FAR* ppvObj);
+
+STDAPI OleCreateFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,
+ DWORD renderopt, LPFORMATETC pFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
+ LPVOID FAR* ppvObj);
+
+STDAPI OleCreateLinkFromData(LPDATAOBJECT pSrcDataObj, REFIID riid,
+ DWORD renderopt, LPFORMATETC pFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
+ LPVOID FAR* ppvObj);
+
+STDAPI OleCreateStaticFromData(LPDATAOBJECT pSrcDataObj, REFIID iid,
+ DWORD renderopt, LPFORMATETC pFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg,
+ LPVOID FAR* ppvObj);
+
+
+STDAPI OleCreateLink(LPMONIKER pmkLinkSrc, REFIID riid,
+ DWORD renderopt, LPFORMATETC lpFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID FAR* ppvObj);
+
+STDAPI OleCreateLinkToFile(LPCSTR lpszFileName, REFIID riid,
+ DWORD renderopt, LPFORMATETC lpFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID FAR* ppvObj);
+
+STDAPI OleCreateFromFile(REFCLSID rclsid, LPCSTR lpszFileName, REFIID riid,
+ DWORD renderopt, LPFORMATETC lpFormatEtc,
+ LPOLECLIENTSITE pClientSite, LPSTORAGE pStg, LPVOID FAR* ppvObj);
+
+STDAPI OleLoad(LPSTORAGE pStg, REFIID riid, LPOLECLIENTSITE pClientSite,
+ LPVOID FAR* ppvObj);
+
+STDAPI OleSave(LPPERSISTSTORAGE pPS, LPSTORAGE pStg, BOOL fSameAsLoad);
+
+STDAPI OleLoadFromStream( LPSTREAM pStm, REFIID iidInterface, LPVOID FAR* ppvObj);
+STDAPI OleSaveToStream( LPPERSISTSTREAM pPStm, LPSTREAM pStm );
+
+
+STDAPI OleSetContainedObject(LPUNKNOWN pUnknown, BOOL fContained);
+STDAPI OleNoteObjectVisible(LPUNKNOWN pUnknown, BOOL fVisible);
+
+
+/* Drag/Drop APIs */
+
+STDAPI RegisterDragDrop(HWND hwnd, LPDROPTARGET pDropTarget);
+STDAPI RevokeDragDrop(HWND hwnd);
+STDAPI DoDragDrop(LPDATAOBJECT pDataObj, LPDROPSOURCE pDropSource,
+ DWORD dwOKEffects, LPDWORD pdwEffect);
+
+/* Clipboard APIs */
+
+STDAPI OleSetClipboard(LPDATAOBJECT pDataObj);
+STDAPI OleGetClipboard(LPDATAOBJECT FAR* ppDataObj);
+STDAPI OleFlushClipboard(void);
+STDAPI OleIsCurrentClipboard(LPDATAOBJECT pDataObj);
+
+
+/* InPlace Editing APIs */
+
+STDAPI_(HOLEMENU) OleCreateMenuDescriptor (HMENU hmenuCombined,
+ LPOLEMENUGROUPWIDTHS lpMenuWidths);
+STDAPI OleSetMenuDescriptor (HOLEMENU holemenu, HWND hwndFrame,
+ HWND hwndActiveObject,
+ LPOLEINPLACEFRAME lpFrame,
+ LPOLEINPLACEACTIVEOBJECT lpActiveObj);
+STDAPI OleDestroyMenuDescriptor (HOLEMENU holemenu);
+
+STDAPI OleTranslateAccelerator (LPOLEINPLACEFRAME lpFrame,
+ LPOLEINPLACEFRAMEINFO lpFrameInfo, LPMSG lpmsg);
+
+
+/* Helper APIs */
+STDAPI_(HANDLE) OleDuplicateData (HANDLE hSrc, CLIPFORMAT cfFormat,
+ UINT uiFlags);
+
+STDAPI OleDraw (LPUNKNOWN pUnknown, DWORD dwAspect, HDC hdcDraw,
+ LPCRECT lprcBounds);
+
+STDAPI OleRun(LPUNKNOWN pUnknown);
+STDAPI_(BOOL) OleIsRunning(LPOLEOBJECT pObject);
+STDAPI OleLockRunning(LPUNKNOWN pUnknown, BOOL fLock, BOOL fLastUnlockCloses);
+
+STDAPI_(void) ReleaseStgMedium(LPSTGMEDIUM);
+STDAPI CreateOleAdviseHolder(LPOLEADVISEHOLDER FAR* ppOAHolder);
+
+STDAPI OleCreateDefaultHandler(REFCLSID clsid, LPUNKNOWN pUnkOuter,
+ REFIID riid, LPVOID FAR* lplpObj);
+
+STDAPI OleCreateEmbeddingHelper(REFCLSID clsid, LPUNKNOWN pUnkOuter,
+ DWORD flags, LPCLASSFACTORY pCF,
+ REFIID riid, LPVOID FAR* lplpObj);
+
+STDAPI_(BOOL) IsAccelerator(HACCEL hAccel, int cAccelEntries, LPMSG lpMsg,
+ WORD FAR* lpwCmd);
+
+
+/* Icon extraction Helper APIs */
+
+STDAPI_(HGLOBAL) OleGetIconOfFile(LPSTR lpszPath, BOOL fUseFileAsLabel);
+
+STDAPI_(HGLOBAL) OleGetIconOfClass(REFCLSID rclsid, LPSTR lpszLabel,
+ BOOL fUseTypeAsLabel);
+
+STDAPI_(HGLOBAL) OleMetafilePictFromIconAndLabel(HICON hIcon, LPSTR lpszLabel,
+ LPSTR lpszSourceFile, UINT iIconIndex);
+
+
+
+/* Registration Database Helper APIs */
+
+STDAPI OleRegGetUserType (REFCLSID clsid, DWORD dwFormOfType,
+ LPSTR FAR* pszUserType);
+
+STDAPI OleRegGetMiscStatus (REFCLSID clsid, DWORD dwAspect,
+ DWORD FAR* pdwStatus);
+
+STDAPI OleRegEnumFormatEtc (REFCLSID clsid, DWORD dwDirection,
+ LPENUMFORMATETC FAR* ppenum);
+
+STDAPI OleRegEnumVerbs (REFCLSID clsid, LPENUMOLEVERB FAR* ppenum);
+
+
+
+/* OLE 1.0 conversion APIS */
+
+STDAPI OleConvertIStorageToOLESTREAM
+ (LPSTORAGE pstg,
+ LPOLESTREAM polestm);
+
+STDAPI OleConvertOLESTREAMToIStorage
+ (LPOLESTREAM polestm,
+ LPSTORAGE pstg,
+ const DVTARGETDEVICE FAR* ptd);
+
+STDAPI OleConvertIStorageToOLESTREAMEx
+ (LPSTORAGE pstg,
+ // Presentation data to OLESTREAM
+ CLIPFORMAT cfFormat, // format
+ LONG lWidth, // width
+ LONG lHeight, // height
+ DWORD dwSize, // size in bytes
+ LPSTGMEDIUM pmedium, // bits
+ LPOLESTREAM polestm);
+
+STDAPI OleConvertOLESTREAMToIStorageEx
+ (LPOLESTREAM polestm,
+ LPSTORAGE pstg,
+ // Presentation data from OLESTREAM
+ CLIPFORMAT FAR* pcfFormat, // format
+ LONG FAR* plwWidth, // width
+ LONG FAR* plHeight, // height
+ DWORD FAR* pdwSize, // size in bytes
+ LPSTGMEDIUM pmedium); // bits
+
+
+
+/* Storage Utility APIs */
+STDAPI GetHGlobalFromILockBytes (LPLOCKBYTES plkbyt, HGLOBAL FAR* phglobal);
+STDAPI CreateILockBytesOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease,
+ LPLOCKBYTES FAR* pplkbyt);
+
+STDAPI GetHGlobalFromStream (LPSTREAM pstm, HGLOBAL FAR* phglobal);
+STDAPI CreateStreamOnHGlobal (HGLOBAL hGlobal, BOOL fDeleteOnRelease,
+ LPSTREAM FAR* ppstm);
+
+
+/* ConvertTo APIS */
+
+STDAPI OleDoAutoConvert(LPSTORAGE pStg, LPCLSID pClsidNew);
+STDAPI OleGetAutoConvert(REFCLSID clsidOld, LPCLSID pClsidNew);
+STDAPI OleSetAutoConvert(REFCLSID clsidOld, REFCLSID clsidNew);
+STDAPI GetConvertStg(LPSTORAGE pStg);
+STDAPI SetConvertStg(LPSTORAGE pStg, BOOL fConvert);
+
+
+#endif // _OLE2_H_
diff --git a/private/oleauto/ole/win16/ole2.reg b/private/oleauto/ole/win16/ole2.reg
new file mode 100644
index 000000000..fe992a65b
--- /dev/null
+++ b/private/oleauto/ole/win16/ole2.reg
@@ -0,0 +1,460 @@
+REGEDIT
+
+//
+// The values of the following keys need to be localized
+//
+// LANGUAGE: USA
+//
+
+; The string "Edit" below is to be localized.
+HKEY_CLASSES_ROOT\Software\Microsoft\OLE1\UnregisteredVerb = Edit
+
+; The string "Unknown" below is to be localized.
+HKEY_CLASSES_ROOT\Software\Microsoft\OLE2\UnknownUserType = Unknown
+
+; The string "Picture (Metafile)" is to be localized.
+HKEY_CLASSES_ROOT\StaticMetafile = Picture (Metafile)
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046} = Picture (Metafile)
+
+; The string "Picture" is to be localized.
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\AuxUserType\2 = Picture
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\AuxUserType\2 = Picture
+
+; The string "Picture (Device Independent Bitmap)" is to be localized.
+HKEY_CLASSES_ROOT\StaticDib = Picture (Device Independent Bitmap)
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046} = Picture (Device Independent Bitmap)
+
+; The string "Paintbrush Picture" is to be localized.
+HKEY_CLASSES_ROOT\CLSID\{0003000a-0000-0000-C000-000000000046} = Paintbrush Picture
+
+; The string "Microsoft Drawing" is to be localized.
+HKEY_CLASSES_ROOT\CLSID\{00030007-0000-0000-C000-000000000046} = Microsoft Drawing
+
+; The string "OLE (Part * of 5)" below is to be localized.
+HKEY_CLASSES_ROOT\CLSID = OLE (Part 1 of 5)
+HKEY_CLASSES_ROOT\Software = OLE (Part 2 of 5)
+HKEY_CLASSES_ROOT\Interface = OLE (Part 3 of 5)
+HKEY_CLASSES_ROOT\TypeLib = OLE (Part 4 of 5)
+HKEY_CLASSES_ROOT\FileType = OLE (Part 5 of 5)
+
+// -------------------- NO LOCALIZATION NECESSARY BELOW THIS LINE ------------
+
+; registration info for ole2 private classes
+
+HKEY_CLASSES_ROOT\CLSID\{00000300-0000-0000-C000-000000000046} = StdOleLink
+HKEY_CLASSES_ROOT\CLSID\{00000300-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000301-0000-0000-C000-000000000046} = StdMemStm
+HKEY_CLASSES_ROOT\CLSID\{00000301-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000302-0000-0000-C000-000000000046} = StdMemBytes
+HKEY_CLASSES_ROOT\CLSID\{00000302-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000303-0000-0000-C000-000000000046} = FileMoniker
+HKEY_CLASSES_ROOT\CLSID\{00000303-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000304-0000-0000-C000-000000000046} = ItemMoniker
+HKEY_CLASSES_ROOT\CLSID\{00000304-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000305-0000-0000-C000-000000000046} = AntiMoniker
+HKEY_CLASSES_ROOT\CLSID\{00000305-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000306-0000-0000-C000-000000000046} = PointerMoniker
+HKEY_CLASSES_ROOT\CLSID\{00000306-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+; 307 used to be CDdeFileMoniker
+
+HKEY_CLASSES_ROOT\CLSID\{00000308-0000-0000-C000-000000000046} = PackagerMoniker
+HKEY_CLASSES_ROOT\CLSID\{00000308-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000309-0000-0000-C000-000000000046} = CompositeMoniker
+HKEY_CLASSES_ROOT\CLSID\{00000309-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{0000030A-0000-0000-C000-000000000046} = DdeCompositeMoniker
+HKEY_CLASSES_ROOT\CLSID\{0000030A-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+HKEY_CLASSES_ROOT\CLSID\{0000030B-0000-0000-C000-000000000046} = DfMarshal
+HKEY_CLASSES_ROOT\CLSID\{0000030B-0000-0000-C000-000000000046}\InprocServer = storage.dll
+
+
+// servers for proxy/stub objects
+HKEY_CLASSES_ROOT\CLSID\{0000030C-0000-0000-C000-000000000046} = PSGenObject
+HKEY_CLASSES_ROOT\CLSID\{0000030C-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{0000030D-0000-0000-C000-000000000046} = PSClientSite
+HKEY_CLASSES_ROOT\CLSID\{0000030D-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{0000030E-0000-0000-C000-000000000046} = PSClassObject
+HKEY_CLASSES_ROOT\CLSID\{0000030E-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{0000030F-0000-0000-C000-000000000046} = PSInPlaceActive
+HKEY_CLASSES_ROOT\CLSID\{0000030F-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000310-0000-0000-C000-000000000046} = PSInPlaceFrame
+HKEY_CLASSES_ROOT\CLSID\{00000310-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000311-0000-0000-C000-000000000046} = PSDragDrop
+HKEY_CLASSES_ROOT\CLSID\{00000311-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000312-0000-0000-C000-000000000046} = PSBindCtx
+HKEY_CLASSES_ROOT\CLSID\{00000312-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000313-0000-0000-C000-000000000046} = PSEnumerators
+HKEY_CLASSES_ROOT\CLSID\{00000313-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00000314-0000-0000-C000-000000000046} = PSStore
+HKEY_CLASSES_ROOT\CLSID\{00000314-0000-0000-C000-000000000046}\InprocServer = ole2prox.dll
+
+
+//
+//StaticMetafile
+//
+;Root level key
+HKEY_CLASSES_ROOT\StaticMetafile\CLSID = {00000315-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\ProgID = StaticMetafile
+
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+
+; Default File Format = CF_METAFILEPICT
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\DataFormats\DefaultFile = 3
+
+; Format 0 = CF_METAFILEPICT, DVASPECT_CONTENT, TYMED_MFPICT, DATADIR_BOTH
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\DataFormats\GetSet\0 = 3,1,32,3
+
+; MiscStatus = OLEMISC_STATIC | OLEMISC_CANTLINKINSIDE | OLEMISC_RENDERINGISDEVICEINDEPENDENT = 8 + 16 + 512
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\MiscStatus = 536
+; Readable format = CF_METAFILEPICT
+HKEY_CLASSES_ROOT\CLSID\{00000315-0000-0000-C000-000000000046}\Conversion\Readable\Main = 3,MSDraw
+
+
+//
+//StaticDib
+//
+
+; Root level keys
+HKEY_CLASSES_ROOT\StaticDib\CLSID = {00000316-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\ProgID = StaticDib
+
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\InprocServer = ole2.dll
+
+
+
+; Default File Format = CF_DIB
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\DataFormats\DefaultFile = 8
+
+; Format 0 = CF_DIB, DVASPECT_CONTENT, TYMED_HGLOBAL, DATADIR_BOTH
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\DataFormats\GetSet\0 = 8,1,1,3
+
+; MiscStatus = OLEMISC_STATIC | OLEMISC_CANTLINKINSIDE | OLEMISC_RENDERINGISDEVICEINDEPENDENT = 8 + 16 + 512
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\MiscStatus = 536
+
+; Readable format = CF_DIB
+HKEY_CLASSES_ROOT\CLSID\{00000316-0000-0000-C000-000000000046}\Conversion\Readable\Main = 8,PBrush
+
+
+//
+//PBrush
+//
+
+; ProgID
+HKEY_CLASSES_ROOT\CLSID\{0003000a-0000-0000-C000-000000000046}\ProgID = PBrush
+
+; Ole1Class
+HKEY_CLASSES_ROOT\CLSID\{0003000a-0000-0000-C000-000000000046}\Ole1Class = PBrush
+
+
+; MiscStatus = OLEMISC_RENDERINGISDEVICEINDEPENDENT = 512
+HKEY_CLASSES_ROOT\CLSID\{0003000a-0000-0000-C000-000000000046}\MiscStatus = 512
+
+; Readwritable format = CF_DIB
+HKEY_CLASSES_ROOT\CLSID\{0003000a-0000-0000-C000-000000000046}\Conversion\Readable\Main = 8
+
+//
+// MSDraw
+//
+
+; ProgID
+HKEY_CLASSES_ROOT\CLSID\{00030007-0000-0000-C000-000000000046}\ProgID = MSDraw
+
+; Ole1Class
+HKEY_CLASSES_ROOT\CLSID\{00030007-0000-0000-C000-000000000046}\Ole1Class = MSDraw
+
+; MiscStatus = OLEMISC_RENDERINGISDEVICEINDEPENDENT = 512
+HKEY_CLASSES_ROOT\CLSID\{00030007-0000-0000-C000-000000000046}\MiscStatus = 512
+
+
+// maps IIDs into proxy/stub class id
+HKEY_CLASSES_ROOT\Interface\{00000000-0000-0000-C000-000000000046} = IUnknown
+HKEY_CLASSES_ROOT\Interface\{00000000-0000-0000-C000-000000000046}\BaseInterface =
+HKEY_CLASSES_ROOT\Interface\{00000000-0000-0000-C000-000000000046}\NumMethods = 3
+
+HKEY_CLASSES_ROOT\Interface\{00000001-0000-0000-C000-000000000046} = IClassFactory
+HKEY_CLASSES_ROOT\Interface\{00000001-0000-0000-C000-000000000046}\NumMethods = 5
+HKEY_CLASSES_ROOT\Interface\{00000001-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030E-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000002-0000-0000-C000-000000000046} = IMalloc
+HKEY_CLASSES_ROOT\Interface\{00000002-0000-0000-C000-000000000046}\NumMethods = 9
+
+HKEY_CLASSES_ROOT\Interface\{00000003-0000-0000-C000-000000000046} = IMarshal
+HKEY_CLASSES_ROOT\Interface\{00000003-0000-0000-C000-000000000046}\NumMethods = 9
+
+HKEY_CLASSES_ROOT\Interface\{00000004-0000-0000-C000-000000000046} = IRpcChannel
+HKEY_CLASSES_ROOT\Interface\{00000004-0000-0000-C000-000000000046}\NumMethods = 7
+
+HKEY_CLASSES_ROOT\Interface\{00000005-0000-0000-C000-000000000046} = IRpcStub
+HKEY_CLASSES_ROOT\Interface\{00000005-0000-0000-C000-000000000046}\NumMethods = 8
+
+HKEY_CLASSES_ROOT\Interface\{00000007-0000-0000-C000-000000000046} = IRpcProxy
+HKEY_CLASSES_ROOT\Interface\{00000007-0000-0000-C000-000000000046}\NumMethods = 5
+
+HKEY_CLASSES_ROOT\Interface\{00000009-0000-0000-C000-000000000046} = IPSFactory
+HKEY_CLASSES_ROOT\Interface\{00000009-0000-0000-C000-000000000046}\NumMethods = 5
+
+HKEY_CLASSES_ROOT\Interface\{0000000A-0000-0000-C000-000000000046} = ILockBytes
+HKEY_CLASSES_ROOT\Interface\{0000000A-0000-0000-C000-000000000046}\NumMethods = 10
+HKEY_CLASSES_ROOT\Interface\{0000000A-0000-0000-C000-000000000046}\ProxyStubClsid = {00000314-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000000B-0000-0000-C000-000000000046} = IStorage
+HKEY_CLASSES_ROOT\Interface\{0000000B-0000-0000-C000-000000000046}\NumMethods = 18
+HKEY_CLASSES_ROOT\Interface\{0000000B-0000-0000-C000-000000000046}\ProxyStubClsid = {00000314-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000000C-0000-0000-C000-000000000046} = IStream
+HKEY_CLASSES_ROOT\Interface\{0000000C-0000-0000-C000-000000000046}\NumMethods = 14
+HKEY_CLASSES_ROOT\Interface\{0000000C-0000-0000-C000-000000000046}\ProxyStubClsid = {00000314-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000000D-0000-0000-C000-000000000046} = IEnumSTATSTG
+HKEY_CLASSES_ROOT\Interface\{0000000D-0000-0000-C000-000000000046}\NumMethods = 7
+
+HKEY_CLASSES_ROOT\Interface\{0000000E-0000-0000-C000-000000000046} = IBindCtx
+HKEY_CLASSES_ROOT\Interface\{0000000E-0000-0000-C000-000000000046}\NumMethods = 13
+HKEY_CLASSES_ROOT\Interface\{0000000E-0000-0000-C000-000000000046}\ProxyStubClsid = {00000312-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000000F-0000-0000-C000-000000000046} = IMoniker
+HKEY_CLASSES_ROOT\Interface\{0000000F-0000-0000-C000-000000000046}\BaseInterface = {00000109-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{0000000F-0000-0000-C000-000000000046}\NumMethods = 23
+
+HKEY_CLASSES_ROOT\Interface\{00000010-0000-0000-C000-000000000046} = IRunningObjectTable
+HKEY_CLASSES_ROOT\Interface\{00000010-0000-0000-C000-000000000046}\NumMethods = 10
+
+HKEY_CLASSES_ROOT\Interface\{00000012-0000-0000-C000-000000000046} = IRootStorage
+HKEY_CLASSES_ROOT\Interface\{00000012-0000-0000-C000-000000000046}\NumMethods = 4
+
+HKEY_CLASSES_ROOT\Interface\{00000016-0000-0000-C000-000000000046} = IMessageFilter
+HKEY_CLASSES_ROOT\Interface\{00000016-0000-0000-C000-000000000046}\NumMethods = 6
+
+HKEY_CLASSES_ROOT\Interface\{00000018-0000-0000-C000-000000000046} = IStdMarshalInfo
+HKEY_CLASSES_ROOT\Interface\{00000018-0000-0000-C000-000000000046}\NumMethods = 4
+
+HKEY_CLASSES_ROOT\Interface\{00000019-0000-0000-C000-000000000046} = IExternalConnection
+HKEY_CLASSES_ROOT\Interface\{00000019-0000-0000-C000-000000000046}\NumMethods = 5
+
+HKEY_CLASSES_ROOT\Interface\{00000100-0000-0000-C000-000000000046} = IEnumUnknown
+HKEY_CLASSES_ROOT\Interface\{00000100-0000-0000-C000-000000000046}\NumMethods = 7
+
+HKEY_CLASSES_ROOT\Interface\{00000101-0000-0000-C000-000000000046} = IEnumString
+HKEY_CLASSES_ROOT\Interface\{00000101-0000-0000-C000-000000000046}\NumMethods = 7
+
+HKEY_CLASSES_ROOT\Interface\{00000102-0000-0000-C000-000000000046} = IEnumMoniker
+HKEY_CLASSES_ROOT\Interface\{00000102-0000-0000-C000-000000000046}\NumMethods = 7
+
+HKEY_CLASSES_ROOT\Interface\{00000103-0000-0000-C000-000000000046} = IEnumFORMATETC
+HKEY_CLASSES_ROOT\Interface\{00000103-0000-0000-C000-000000000046}\NumMethods = 7
+HKEY_CLASSES_ROOT\Interface\{00000103-0000-0000-C000-000000000046}\ProxyStubClsid = {00000313-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000104-0000-0000-C000-000000000046} = IEnumOLEVERB
+HKEY_CLASSES_ROOT\Interface\{00000104-0000-0000-C000-000000000046}\NumMethods = 7
+HKEY_CLASSES_ROOT\Interface\{00000104-0000-0000-C000-000000000046}\ProxyStubClsid = {00000313-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000105-0000-0000-C000-000000000046} = IEnumSTATDATA
+HKEY_CLASSES_ROOT\Interface\{00000105-0000-0000-C000-000000000046}\NumMethods = 7
+HKEY_CLASSES_ROOT\Interface\{00000105-0000-0000-C000-000000000046}\ProxyStubClsid = {00000313-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000109-0000-0000-C000-000000000046} = IPersistStream
+HKEY_CLASSES_ROOT\Interface\{00000109-0000-0000-C000-000000000046}\BaseInterface = {0000010C-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000109-0000-0000-C000-000000000046}\NumMethods = 8
+
+HKEY_CLASSES_ROOT\Interface\{0000010A-0000-0000-C000-000000000046} = IPersistStorage
+HKEY_CLASSES_ROOT\Interface\{0000010A-0000-0000-C000-000000000046}\BaseInterface = {0000010C-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{0000010A-0000-0000-C000-000000000046}\NumMethods = 10
+HKEY_CLASSES_ROOT\Interface\{0000010A-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000010B-0000-0000-C000-000000000046} = IPersistFile
+HKEY_CLASSES_ROOT\Interface\{0000010B-0000-0000-C000-000000000046}\BaseInterface = {0000010C-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{0000010B-0000-0000-C000-000000000046}\NumMethods = 9
+HKEY_CLASSES_ROOT\Interface\{0000010B-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000010C-0000-0000-C000-000000000046} = IPersist
+HKEY_CLASSES_ROOT\Interface\{0000010C-0000-0000-C000-000000000046}\NumMethods = 4
+HKEY_CLASSES_ROOT\Interface\{0000010C-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000010D-0000-0000-C000-000000000046} = IViewObject
+HKEY_CLASSES_ROOT\Interface\{0000010D-0000-0000-C000-000000000046}\NumMethods = 9
+
+HKEY_CLASSES_ROOT\Interface\{0000010E-0000-0000-C000-000000000046} = IDataObject
+HKEY_CLASSES_ROOT\Interface\{0000010E-0000-0000-C000-000000000046}\NumMethods = 12
+HKEY_CLASSES_ROOT\Interface\{0000010E-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000010F-0000-0000-C000-000000000046} = IAdviseSink
+HKEY_CLASSES_ROOT\Interface\{0000010F-0000-0000-C000-000000000046}\NumMethods = 8
+HKEY_CLASSES_ROOT\Interface\{0000010F-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030D-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000110-0000-0000-C000-000000000046} = IDataAdviseHolder
+HKEY_CLASSES_ROOT\Interface\{00000110-0000-0000-C000-000000000046}\NumMethods = 7
+
+HKEY_CLASSES_ROOT\Interface\{00000111-0000-0000-C000-000000000046} = IOleAdviseHolder
+HKEY_CLASSES_ROOT\Interface\{00000111-0000-0000-C000-000000000046}\NumMethods = 9
+
+HKEY_CLASSES_ROOT\Interface\{00000112-0000-0000-C000-000000000046} = IOleObject
+HKEY_CLASSES_ROOT\Interface\{00000112-0000-0000-C000-000000000046}\NumMethods = 24
+HKEY_CLASSES_ROOT\Interface\{00000112-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000113-0000-0000-C000-000000000046} = IOleInPlaceObject
+HKEY_CLASSES_ROOT\Interface\{00000113-0000-0000-C000-000000000046}\BaseInterface = {00000114-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000113-0000-0000-C000-000000000046}\NumMethods = 9
+HKEY_CLASSES_ROOT\Interface\{00000113-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000114-0000-0000-C000-000000000046} = IOleWindow
+HKEY_CLASSES_ROOT\Interface\{00000114-0000-0000-C000-000000000046}\NumMethods = 5
+
+HKEY_CLASSES_ROOT\Interface\{00000115-0000-0000-C000-000000000046} = IOleInPlaceUIWindow
+HKEY_CLASSES_ROOT\Interface\{00000115-0000-0000-C000-000000000046}\BaseInterface = {00000114-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000115-0000-0000-C000-000000000046}\NumMethods = 9
+HKEY_CLASSES_ROOT\Interface\{00000115-0000-0000-C000-000000000046}\ProxyStubClsid = {00000310-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000116-0000-0000-C000-000000000046} = IOleInPlaceFrame
+HKEY_CLASSES_ROOT\Interface\{00000116-0000-0000-C000-000000000046}\NumMethods = 15
+HKEY_CLASSES_ROOT\Interface\{00000116-0000-0000-C000-000000000046}\ProxyStubClsid = {00000310-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000117-0000-0000-C000-000000000046} = IOleInPlaceActiveObject
+HKEY_CLASSES_ROOT\Interface\{00000117-0000-0000-C000-000000000046}\BaseInterface = {00000114-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000117-0000-0000-C000-000000000046}\NumMethods = 10
+HKEY_CLASSES_ROOT\Interface\{00000117-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030F-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000118-0000-0000-C000-000000000046} = IOleClientSite
+HKEY_CLASSES_ROOT\Interface\{00000118-0000-0000-C000-000000000046}\NumMethods = 9
+HKEY_CLASSES_ROOT\Interface\{00000118-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030D-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000119-0000-0000-C000-000000000046} = IOleInPlaceSite
+HKEY_CLASSES_ROOT\Interface\{00000119-0000-0000-C000-000000000046}\BaseInterface = {00000114-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000119-0000-0000-C000-000000000046}\NumMethods = 15
+HKEY_CLASSES_ROOT\Interface\{00000119-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030D-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000011A-0000-0000-C000-000000000046} = IParseDisplayName
+HKEY_CLASSES_ROOT\Interface\{0000011A-0000-0000-C000-000000000046}\NumMethods = 4
+HKEY_CLASSES_ROOT\Interface\{0000011A-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000011B-0000-0000-C000-000000000046} = IOleContainer
+HKEY_CLASSES_ROOT\Interface\{0000011B-0000-0000-C000-000000000046}\BaseInterface = {0000011A-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{0000011B-0000-0000-C000-000000000046}\NumMethods = 6
+HKEY_CLASSES_ROOT\Interface\{0000011B-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000011C-0000-0000-C000-000000000046} = IOleItemContainer
+HKEY_CLASSES_ROOT\Interface\{0000011C-0000-0000-C000-000000000046}\BaseInterface = {0000011B-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{0000011C-0000-0000-C000-000000000046}\NumMethods = 9
+HKEY_CLASSES_ROOT\Interface\{0000011C-0000-0000-C000-000000000046}\ProxyStubClsid = {0000030C-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{0000011D-0000-0000-C000-000000000046} = IOleLink
+HKEY_CLASSES_ROOT\Interface\{0000011D-0000-0000-C000-000000000046}\NumMethods = 14
+
+HKEY_CLASSES_ROOT\Interface\{0000011E-0000-0000-C000-000000000046} = IOleCache
+HKEY_CLASSES_ROOT\Interface\{0000011E-0000-0000-C000-000000000046}\NumMethods = 8
+
+HKEY_CLASSES_ROOT\Interface\{00000121-0000-0000-C000-000000000046} = IDropSource
+HKEY_CLASSES_ROOT\Interface\{00000121-0000-0000-C000-000000000046}\NumMethods = 5
+
+HKEY_CLASSES_ROOT\Interface\{00000122-0000-0000-C000-000000000046} = IDropTarget
+HKEY_CLASSES_ROOT\Interface\{00000122-0000-0000-C000-000000000046}\NumMethods = 7
+HKEY_CLASSES_ROOT\Interface\{00000122-0000-0000-C000-000000000046}\ProxyStubClsid = {00000311-0000-0000-C000-000000000046}
+
+HKEY_CLASSES_ROOT\Interface\{00000124-0000-0000-C000-000000000046} = IDebugStream
+HKEY_CLASSES_ROOT\Interface\{00000124-0000-0000-C000-000000000046}\NumMethods = 19
+
+HKEY_CLASSES_ROOT\Interface\{00000125-0000-0000-C000-000000000046} = IAdviseSink2
+HKEY_CLASSES_ROOT\Interface\{00000125-0000-0000-C000-000000000046}\BaseInterface = {0000010F-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000125-0000-0000-C000-000000000046}\NumMethods = 9
+
+HKEY_CLASSES_ROOT\Interface\{00000126-0000-0000-C000-000000000046} = IRunnableObject
+HKEY_CLASSES_ROOT\Interface\{00000126-0000-0000-C000-000000000046}\NumMethods = 8
+
+HKEY_CLASSES_ROOT\Interface\{00000127-0000-0000-C000-000000000046} = IViewObject2
+HKEY_CLASSES_ROOT\Interface\{00000127-0000-0000-C000-000000000046}\BaseInterface = {0000010D-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000127-0000-0000-C000-000000000046}\NumMethods = 10
+
+HKEY_CLASSES_ROOT\Interface\{00000128-0000-0000-C000-000000000046} = IOleCache2
+HKEY_CLASSES_ROOT\Interface\{00000128-0000-0000-C000-000000000046}\BaseInterface = {0000011E-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\Interface\{00000128-0000-0000-C000-000000000046}\NumMethods = 10
+
+HKEY_CLASSES_ROOT\Interface\{00000129-0000-0000-C000-000000000046} = IOleCacheControl
+HKEY_CLASSES_ROOT\Interface\{00000129-0000-0000-C000-000000000046}\NumMethods = 5
+
+//
+//; registration info for the ole programmability component (automation)
+//
+
+-- IDispatch
+
+HKEY_CLASSES_ROOT\Interface\{00020400-0000-0000-C000-000000000046} = IDispatch
+HKEY_CLASSES_ROOT\Interface\{00020400-0000-0000-C000-000000000046}\NumMethods = 7
+HKEY_CLASSES_ROOT\Interface\{00020400-0000-0000-C000-000000000046}\ProxyStubClsid = {00020420-0000-0000-C000-000000000046}
+
+
+-- IEnumVARIANT
+
+HKEY_CLASSES_ROOT\Interface\{00020404-0000-0000-C000-000000000046} = IEnumVARIANT
+HKEY_CLASSES_ROOT\Interface\{00020404-0000-0000-C000-000000000046}\NumMethods = 7
+HKEY_CLASSES_ROOT\Interface\{00020404-0000-0000-C000-000000000046}\ProxyStubClsid = {00020421-0000-0000-C000-000000000046}
+
+
+-- ITypeInfo
+
+HKEY_CLASSES_ROOT\Interface\{00020401-0000-0000-C000-000000000046} = ITypeInfo
+HKEY_CLASSES_ROOT\Interface\{00020401-0000-0000-C000-000000000046}\NumMethods = 22
+HKEY_CLASSES_ROOT\Interface\{00020401-0000-0000-C000-000000000046}\ProxyStubClsid = {00020422-0000-0000-C000-000000000046}
+
+
+-- ITypeLib
+
+HKEY_CLASSES_ROOT\Interface\{00020402-0000-0000-C000-000000000046} = ITypeLib
+HKEY_CLASSES_ROOT\Interface\{00020402-0000-0000-C000-000000000046}\NumMethods = 13
+
+
+-- ITypeComp
+
+HKEY_CLASSES_ROOT\Interface\{00020403-0000-0000-C000-000000000046} = ITypeComp
+HKEY_CLASSES_ROOT\Interface\{00020403-0000-0000-C000-000000000046}\NumMethods = 5
+
+-- ICreateTypeInfo
+
+HKEY_CLASSES_ROOT\Interface\{00020405-0000-0000-C000-000000000046} = ICreateTypeInfo
+HKEY_CLASSES_ROOT\Interface\{00020405-0000-0000-C000-000000000046}\NumMethods = 26
+
+
+-- ICreateTypeLib
+
+HKEY_CLASSES_ROOT\Interface\{00020406-0000-0000-C000-000000000046} = ICreateTypeLib
+HKEY_CLASSES_ROOT\Interface\{00020406-0000-0000-C000-000000000046}\NumMethods = 13
+
+
+-- OLE Automation stdole.tlb registration
+
+HKEY_CLASSES_ROOT\TypeLib\{00020430-0000-0000-C000-000000000046}
+HKEY_CLASSES_ROOT\TypeLib\{00020430-0000-0000-C000-000000000046}\1.0 = OLE Automation
+HKEY_CLASSES_ROOT\TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\HELPDIR =
+HKEY_CLASSES_ROOT\TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win16 = stdole.tlb
+
+
+-- Registration info for OLE Automation private classes
+
+HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046} = PSDispatch
+HKEY_CLASSES_ROOT\CLSID\{00020420-0000-0000-C000-000000000046}\InprocServer = ole2disp.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00020422-0000-0000-C000-000000000046} = PSTypeInfo
+HKEY_CLASSES_ROOT\CLSID\{00020422-0000-0000-C000-000000000046}\InprocServer = ole2disp.dll
+
+HKEY_CLASSES_ROOT\CLSID\{00020421-0000-0000-C000-000000000046} = PSEnumVARIANT
+HKEY_CLASSES_ROOT\CLSID\{00020421-0000-0000-C000-000000000046}\InprocServer = ole2disp.dll
+
+
diff --git a/private/oleauto/ole/win16/ole2dbg.h b/private/oleauto/ole/win16/ole2dbg.h
new file mode 100644
index 000000000..34fbf8384
--- /dev/null
+++ b/private/oleauto/ole/win16/ole2dbg.h
@@ -0,0 +1,19 @@
+/*
+ ole2dbg.h: This header file contains the function declarations for the publicly
+ exported debugging interfaces.
+
+ Include *after* standard OLE2 includes.
+
+ Copyright (c) 1992-1993, Microsoft Corp. All rights reserved.
+*/
+
+#ifndef __OLE2DBG_H
+#define __OLE2DBG_H
+
+STDAPI_(void) DbgDumpObject( IUnknown FAR * pUnk, DWORD dwReserved);
+STDAPI_(void) DbgDumpExternalObject( IUnknown FAR * pUnk, DWORD dwReserved );
+
+STDAPI_(BOOL) DbgIsObjectValid( IUnknown FAR * pUnk );
+STDAPI_(void) DbgDumpClassName( IUnknown FAR * pUnk );
+
+#endif
diff --git a/private/oleauto/ole/win16/ole2ver.h b/private/oleauto/ole/win16/ole2ver.h
new file mode 100644
index 000000000..5cbde9a99
--- /dev/null
+++ b/private/oleauto/ole/win16/ole2ver.h
@@ -0,0 +1,5 @@
+#define rmj 0
+#define rmm 23
+#define rup 639
+#define szVerName ""
+#define szVerUser "Y-OLEBLD"
diff --git a/private/oleauto/ole/win16/oleguid.h b/private/oleauto/ole/win16/oleguid.h
new file mode 100644
index 000000000..723fa50d7
--- /dev/null
+++ b/private/oleauto/ole/win16/oleguid.h
@@ -0,0 +1,80 @@
+/*****************************************************************************\
+* *
+* oleguid.h - Master definition of GUIDs for ole2.dll *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+/* this file is the master definition of all public GUIDs specific to OLE
+ and is included in ole2.h.
+
+ NOTE: The second least significant byte of all of these GUIDs is 1.
+*/
+
+
+DEFINE_OLEGUID(IID_IEnumUnknown, 0x00000100, 0, 0);
+DEFINE_OLEGUID(IID_IEnumString, 0x00000101, 0, 0);
+DEFINE_OLEGUID(IID_IEnumMoniker, 0x00000102, 0, 0);
+DEFINE_OLEGUID(IID_IEnumFORMATETC, 0x00000103, 0, 0);
+DEFINE_OLEGUID(IID_IEnumOLEVERB, 0x00000104, 0, 0);
+DEFINE_OLEGUID(IID_IEnumSTATDATA, 0x00000105, 0, 0);
+
+DEFINE_OLEGUID(IID_IEnumGeneric, 0x00000106, 0, 0);
+DEFINE_OLEGUID(IID_IEnumHolder, 0x00000107, 0, 0);
+DEFINE_OLEGUID(IID_IEnumCallback, 0x00000108, 0, 0);
+
+DEFINE_OLEGUID(IID_IPersistStream, 0x00000109, 0, 0);
+DEFINE_OLEGUID(IID_IPersistStorage, 0x0000010a, 0, 0);
+DEFINE_OLEGUID(IID_IPersistFile, 0x0000010b, 0, 0);
+DEFINE_OLEGUID(IID_IPersist, 0x0000010c, 0, 0);
+
+DEFINE_OLEGUID(IID_IViewObject, 0x0000010d, 0, 0);
+DEFINE_OLEGUID(IID_IDataObject, 0x0000010e, 0, 0);
+DEFINE_OLEGUID(IID_IAdviseSink, 0x0000010f, 0, 0);
+DEFINE_OLEGUID(IID_IDataAdviseHolder, 0x00000110, 0, 0);
+DEFINE_OLEGUID(IID_IOleAdviseHolder, 0x00000111, 0, 0);
+
+DEFINE_OLEGUID(IID_IOleObject, 0x00000112, 0, 0);
+DEFINE_OLEGUID(IID_IOleInPlaceObject, 0x00000113, 0, 0);
+DEFINE_OLEGUID(IID_IOleWindow, 0x00000114, 0, 0);
+DEFINE_OLEGUID(IID_IOleInPlaceUIWindow, 0x00000115, 0, 0);
+DEFINE_OLEGUID(IID_IOleInPlaceFrame, 0x00000116, 0, 0);
+DEFINE_OLEGUID(IID_IOleInPlaceActiveObject, 0x00000117, 0, 0);
+
+DEFINE_OLEGUID(IID_IOleClientSite, 0x00000118, 0, 0);
+DEFINE_OLEGUID(IID_IOleInPlaceSite, 0x00000119, 0, 0);
+
+DEFINE_OLEGUID(IID_IParseDisplayName, 0x0000011a, 0, 0);
+DEFINE_OLEGUID(IID_IOleContainer, 0x0000011b, 0, 0);
+DEFINE_OLEGUID(IID_IOleItemContainer, 0x0000011c, 0, 0);
+
+DEFINE_OLEGUID(IID_IOleLink, 0x0000011d, 0, 0);
+DEFINE_OLEGUID(IID_IOleCache, 0x0000011e, 0, 0);
+DEFINE_OLEGUID(IID_IOleManager, 0x0000011f, 0, 0); // unused
+DEFINE_OLEGUID(IID_IOlePresObj, 0x00000120, 0, 0);
+
+DEFINE_OLEGUID(IID_IDropSource, 0x00000121, 0, 0);
+DEFINE_OLEGUID(IID_IDropTarget, 0x00000122, 0, 0);
+
+DEFINE_OLEGUID(IID_IDebug, 0x00000123, 0, 0);
+DEFINE_OLEGUID(IID_IDebugStream, 0x00000124, 0, 0);
+
+DEFINE_OLEGUID(IID_IAdviseSink2, 0x00000125, 0, 0);
+
+DEFINE_OLEGUID(IID_IRunnableObject, 0x00000126, 0, 0);
+
+DEFINE_OLEGUID(IID_IViewObject2, 0x00000127, 0, 0);
+DEFINE_OLEGUID(IID_IOleCache2, 0x00000128, 0, 0);
+DEFINE_OLEGUID(IID_IOleCacheControl, 0x00000129, 0, 0);
+
+/* NOTE: LSB values 0x27 through 0xff are reserved */
+
+
+/* GUIDs defined in OLE's private range */
+DEFINE_OLEGUID(CLSID_Picture_Metafile, 0x00000315, 0, 0);
+DEFINE_OLEGUID(CLSID_Picture_Dib, 0x00000316, 0, 0);
+
+
diff --git a/private/oleauto/ole/win16/scode.h b/private/oleauto/ole/win16/scode.h
new file mode 100644
index 000000000..cbfb2751c
--- /dev/null
+++ b/private/oleauto/ole/win16/scode.h
@@ -0,0 +1,283 @@
+/*****************************************************************************\
+* *
+* scode.h - Defines standard status code services. *
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+
+#ifndef __SCODE_H__
+#define __SCODE_H__
+
+//
+// SCODE
+//
+
+typedef long SCODE;
+typedef SCODE *PSCODE;
+typedef void FAR * HRESULT;
+#define NOERROR 0
+
+//
+// Status values are 32 bit values layed out as follows:
+//
+// 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
+// 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
+// +-+---------------------+-------+-------------------------------+
+// |S| Context | Facil | Code |
+// +-+---------------------+-------+-------------------------------+
+//
+// where
+//
+// S - is the severity code
+//
+// 0 - Success
+// 1 - Error
+//
+// Context - context info
+//
+// Facility - is the facility code
+//
+// Code - is the facility's status code
+//
+
+//
+// Severity values
+//
+
+#define SEVERITY_SUCCESS 0
+#define SEVERITY_ERROR 1
+
+
+
+#define SUCCEEDED(Status) ((SCODE)(Status) >= 0)
+
+#define FAILED(Status) ((SCODE)(Status)<0)
+
+
+//
+// Return the code
+//
+
+#define SCODE_CODE(sc) ((sc) & 0xFFFF)
+
+//
+// Return the facility
+//
+
+#define SCODE_FACILITY(sc) (((sc) >> 16) & 0x1fff)
+
+//
+// Return the severity
+//
+
+#define SCODE_SEVERITY(sc) (((sc) >> 31) & 0x1)
+
+//
+// Create an SCODE value from component pieces
+//
+
+#define MAKE_SCODE(sev,fac,code) \
+ ((SCODE) (((unsigned long)(sev)<<31) | ((unsigned long)(fac)<<16) | ((unsigned long)(code))) )
+
+
+
+// --------------------- Functions ---------------------------------------
+
+#define GetScode(hr) ((SCODE)(hr) & 0x800FFFFF)
+#define ResultFromScode(sc) ((HRESULT)((SCODE)(sc) & 0x800FFFFF))
+
+STDAPI PropagateResult(HRESULT hrPrev, SCODE scNew);
+
+
+// -------------------------- Facility definitions -------------------------
+
+#define FACILITY_NULL 0x0000 // generally useful errors ([SE]_*)
+#define FACILITY_RPC 0x0001 // remote procedure call errors (RPC_E_*)
+#define FACILITY_DISPATCH 0x0002 // late binding dispatch errors
+#define FACILITY_STORAGE 0x0003 // storage errors (STG_E_*)
+#define FACILITY_ITF 0x0004 // interface-specific errors
+
+
+
+#define S_OK 0L
+#define S_FALSE MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_NULL, 1)
+
+
+
+// --------------------- FACILITY_NULL errors ------------------------------
+
+#define E_UNEXPECTED MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 0xffff)
+ // relatively catastrophic failure
+
+#define E_NOTIMPL MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 1)
+ // not implemented
+
+#define E_OUTOFMEMORY MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 2)
+ // ran out of memory
+
+#define E_INVALIDARG MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 3)
+ // one or more arguments are invalid
+
+#define E_NOINTERFACE MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 4)
+ // no such interface supported
+
+
+#define E_POINTER MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 5)
+ // invalid pointer
+
+#define E_HANDLE MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 6)
+ // invalid handle
+
+#define E_ABORT MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 7)
+ // operation aborted
+
+#define E_FAIL MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 8)
+ // unspecified error
+
+
+#define E_ACCESSDENIED MAKE_SCODE(SEVERITY_ERROR, FACILITY_NULL, 9)
+ // general access denied error
+
+
+// ----------------- FACILITY_ITF errors used by OLE ---------------------
+//
+// By convention, OLE interfaces divide the FACILITY_ITF range of errors
+// into nonoverlapping subranges. If an OLE interface returns a FACILITY_ITF
+// scode, it must be from the range associated with that interface or from
+// the shared range: OLE_E_FIRST...OLE_E_LAST.
+//
+// The ranges, their associated interfaces, and the header file that defines
+// the actual scodes are given below.
+//
+
+// Generic OLE errors that may be returned by many interfaces
+#define OLE_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0000)
+#define OLE_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x00FF)
+#define OLE_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0000)
+#define OLE_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x00FF)
+// interfaces: all
+// file: ole2.h
+
+
+#define DRAGDROP_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0100)
+#define DRAGDROP_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x010F)
+#define DRAGDROP_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0100)
+#define DRAGDROP_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x010F)
+// interfaces: IDropSource, IDropTarget
+// file: ole2.h
+
+#define CLASSFACTORY_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0110)
+#define CLASSFACTORY_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x011F)
+#define CLASSFACTORY_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0110)
+#define CLASSFACTORY_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x011F)
+// interfaces: IClassFactory
+// file:
+
+#define MARSHAL_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0120)
+#define MARSHAL_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x012F)
+#define MARSHAL_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0120)
+#define MARSHAL_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x012F)
+// interfaces: IMarshal, IStdMarshalInfo, marshal APIs
+// file:
+
+#define DATA_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0130)
+#define DATA_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x013F)
+#define DATA_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0130)
+#define DATA_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x013F)
+// interfaces: IDataObject
+// file: dvobj.h
+
+#define VIEW_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0140)
+#define VIEW_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x014F)
+#define VIEW_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0140)
+#define VIEW_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x014F)
+// interfaces: IViewObject
+// file: dvobj.h
+
+#define REGDB_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0150)
+#define REGDB_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x015F)
+#define REGDB_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0150)
+#define REGDB_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x015F)
+// API: reg.dat manipulation
+// file:
+
+
+// range 160 - 16F reserved
+
+#define CACHE_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0170)
+#define CACHE_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x017F)
+#define CACHE_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0170)
+#define CACHE_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x017F)
+// interfaces: IOleCache
+// file:
+
+#define OLEOBJ_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0180)
+#define OLEOBJ_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x018F)
+#define OLEOBJ_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0180)
+#define OLEOBJ_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x018F)
+// interfaces: IOleObject
+// file:
+
+#define CLIENTSITE_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x0190)
+#define CLIENTSITE_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x019F)
+#define CLIENTSITE_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x0190)
+#define CLIENTSITE_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x019F)
+// interfaces: IOleClientSite
+// file:
+
+#define INPLACE_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01A0)
+#define INPLACE_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01AF)
+#define INPLACE_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01A0)
+#define INPLACE_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01AF)
+// interfaces: IOleWindow, IOleInPlaceObject, IOleInPlaceActiveObject,
+// IOleInPlaceUIWindow, IOleInPlaceFrame, IOleInPlaceSite
+// file:
+
+#define ENUM_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01B0)
+#define ENUM_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01BF)
+#define ENUM_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01B0)
+#define ENUM_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01BF)
+// interfaces: IEnum*
+// file:
+
+#define CONVERT10_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01C0)
+#define CONVERT10_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01CF)
+#define CONVERT10_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01C0)
+#define CONVERT10_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01CF)
+// API: OleConvertOLESTREAMToIStorage, OleConvertIStorageToOLESTREAM
+// file:
+
+
+#define CLIPBRD_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01D0)
+#define CLIPBRD_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01DF)
+#define CLIPBRD_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01D0)
+#define CLIPBRD_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01DF)
+// interfaces: OleSetClipboard, OleGetClipboard, OleFlushClipboard
+// file: ole2.h
+
+#define MK_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01E0)
+#define MK_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01EF)
+#define MK_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01E0)
+#define MK_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01EF)
+// interfaces: IMoniker, IBindCtx, IRunningObjectTable, IParseDisplayName,
+// IOleContainer, IOleItemContainer, IOleLink
+// file: moniker.h
+
+
+#define CO_E_FIRST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01F0)
+#define CO_E_LAST MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x01FF)
+#define CO_S_FIRST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01F0)
+#define CO_S_LAST MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_ITF, 0x01FF)
+// all Co* API
+// file: compobj.h
+
+
+// range 200 - ffff for new error codes
+
+
+
+#endif // ifndef __SCODE_H__
diff --git a/private/oleauto/ole/win16/storage.h b/private/oleauto/ole/win16/storage.h
new file mode 100644
index 000000000..e111c1d8f
--- /dev/null
+++ b/private/oleauto/ole/win16/storage.h
@@ -0,0 +1,457 @@
+/*****************************************************************************\
+* *
+* storage.h - Definitions for the strutured storage system
+* *
+* OLE Version 2.0 *
+* *
+* Copyright (c) 1992-1993, Microsoft Corp. All rights reserved. *
+* *
+\*****************************************************************************/
+
+
+#if !defined( _STORAGE_H_ )
+#define _STORAGE_H_
+
+
+#include <compobj.h>
+
+
+/****** Storage Error Codes *************************************************/
+
+/* DOS-based error codes */
+#define STG_E_INVALIDFUNCTION \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x01)
+
+#define STG_E_FILENOTFOUND \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x02)
+
+#define STG_E_PATHNOTFOUND \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x03)
+
+#define STG_E_TOOMANYOPENFILES \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x04)
+
+#define STG_E_ACCESSDENIED \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x05)
+
+#define STG_E_INVALIDHANDLE \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x06)
+
+#define STG_E_INSUFFICIENTMEMORY \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x08)
+
+#define STG_E_INVALIDPOINTER \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x09)
+
+#define STG_E_NOMOREFILES \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x12)
+
+#define STG_E_DISKISWRITEPROTECTED \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x13)
+
+#define STG_E_SEEKERROR \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x19)
+
+#define STG_E_WRITEFAULT \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1d)
+
+#define STG_E_READFAULT \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x1e)
+
+#define STG_E_SHAREVIOLATION \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x20)
+
+#define STG_E_LOCKVIOLATION \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x21)
+
+#define STG_E_FILEALREADYEXISTS \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x50)
+
+#define STG_E_INVALIDPARAMETER \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x57)
+
+#define STG_E_MEDIUMFULL \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x70)
+
+#define STG_E_ABNORMALAPIEXIT \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfa)
+
+#define STG_E_INVALIDHEADER \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfb)
+
+#define STG_E_INVALIDNAME \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfc)
+
+#define STG_E_UNKNOWN \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfd)
+
+#define STG_E_UNIMPLEMENTEDFUNCTION\
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xfe)
+
+#define STG_E_INVALIDFLAG \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0xff)
+
+/* Standard storage error codes */
+#define STG_E_INUSE \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x100)
+
+#define STG_E_NOTCURRENT \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x101)
+
+#define STG_E_REVERTED \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x102)
+
+#define STG_E_CANTSAVE \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x103)
+
+#define STG_E_OLDFORMAT \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x104)
+
+#define STG_E_OLDDLL \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x105)
+
+#define STG_E_SHAREREQUIRED \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x106)
+
+#define STG_E_NOTFILEBASEDSTORAGE \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x107)
+
+#define STG_E_EXTANTMARSHALLINGS \
+ MAKE_SCODE(SEVERITY_ERROR, FACILITY_STORAGE, 0x108)
+
+/* Information returns */
+#define STG_S_CONVERTED \
+ MAKE_SCODE(SEVERITY_SUCCESS, FACILITY_STORAGE, 0x200)
+
+/****** Storage types *******************************************************/
+
+#if defined(_M_I286)
+typedef char TCHAR;
+#ifndef HUGEP
+#define HUGEP _huge
+#endif
+#else
+typedef char TCHAR;
+#ifndef HUGEP
+#define HUGEP
+#endif
+#endif
+
+#define CWCSTORAGENAME 32
+
+/* Storage instantiation modes */
+#define STGM_DIRECT 0x00000000L
+#define STGM_TRANSACTED 0x00010000L
+
+#define STGM_READ 0x00000000L
+#define STGM_WRITE 0x00000001L
+#define STGM_READWRITE 0x00000002L
+
+#define STGM_SHARE_DENY_NONE 0x00000040L
+#define STGM_SHARE_DENY_READ 0x00000030L
+#define STGM_SHARE_DENY_WRITE 0x00000020L
+#define STGM_SHARE_EXCLUSIVE 0x00000010L
+
+#define STGM_PRIORITY 0x00040000L
+#define STGM_DELETEONRELEASE 0x04000000L
+
+#define STGM_CREATE 0x00001000L
+#define STGM_CONVERT 0x00020000L
+#define STGM_FAILIFTHERE 0x00000000L
+
+/* Storage commit types */
+typedef enum tagSTGC
+{
+ STGC_DEFAULT = 0,
+ STGC_OVERWRITE = 1,
+ STGC_ONLYIFCURRENT = 2,
+ STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 4
+} STGC;
+
+/* Stream name block definitions */
+typedef char FAR * FAR *SNB;
+
+
+#ifndef _WINDOWS_
+#ifndef _FILETIME_
+#define _FILETIME_
+typedef struct FARSTRUCT tagFILETIME
+{
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME;
+#endif
+#endif
+
+
+/* Storage stat buffer */
+
+typedef struct FARSTRUCT tagSTATSTG
+{
+ char FAR* pwcsName;
+ DWORD type;
+ ULARGE_INTEGER cbSize;
+ FILETIME mtime;
+ FILETIME ctime;
+ FILETIME atime;
+ DWORD grfMode;
+ DWORD grfLocksSupported;
+ CLSID clsid;
+ DWORD grfStateBits;
+ DWORD reserved;
+} STATSTG;
+
+
+/* Storage element types */
+typedef enum tagSTGTY
+{
+ STGTY_STORAGE = 1,
+ STGTY_STREAM = 2,
+ STGTY_LOCKBYTES = 3,
+ STGTY_PROPERTY = 4
+} STGTY;
+
+typedef enum tagSTREAM_SEEK
+{
+ STREAM_SEEK_SET = 0,
+ STREAM_SEEK_CUR = 1,
+ STREAM_SEEK_END = 2
+} STREAM_SEEK;
+
+typedef enum tagLOCKTYPE
+{
+ LOCK_WRITE = 1,
+ LOCK_EXCLUSIVE = 2,
+ LOCK_ONLYONCE = 4
+} LOCKTYPE;
+
+typedef enum tagSTGMOVE
+{
+ STGMOVE_MOVE = 0,
+ STGMOVE_COPY = 1
+} STGMOVE;
+
+typedef enum tagSTATFLAG
+{
+ STATFLAG_DEFAULT = 0,
+ STATFLAG_NONAME = 1
+} STATFLAG;
+
+
+/****** Storage Enumerators *************************************************/
+
+#undef INTERFACE
+#define INTERFACE IEnumSTATSTG
+
+DECLARE_INTERFACE_(IEnumSTATSTG, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IENUMSTATSTG methods ***
+ STDMETHOD(Next) (THIS_ ULONG celt, STATSTG FAR * rgelt, ULONG FAR *pceltFetched) PURE;
+ STDMETHOD(Skip) (THIS_ ULONG celt) PURE;
+ STDMETHOD(Reset) (THIS) PURE;
+ STDMETHOD(Clone) (THIS_ IEnumSTATSTG FAR *FAR *ppenm) PURE;
+};
+
+typedef IEnumSTATSTG FAR* LPENUMSTATSTG;
+
+
+
+/****** ILockBytes Interface ************************************************/
+
+#undef INTERFACE
+#define INTERFACE ILockBytes
+
+DECLARE_INTERFACE_(ILockBytes, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** ILockBytes methods ***
+ STDMETHOD(ReadAt) (THIS_ ULARGE_INTEGER ulOffset,
+ VOID HUGEP *pv,
+ ULONG cb,
+ ULONG FAR *pcbRead) PURE;
+ STDMETHOD(WriteAt) (THIS_ ULARGE_INTEGER ulOffset,
+ VOID const HUGEP *pv,
+ ULONG cb,
+ ULONG FAR *pcbWritten) PURE;
+ STDMETHOD(Flush) (THIS) PURE;
+ STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER cb) PURE;
+ STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) PURE;
+ STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) PURE;
+ STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
+};
+
+typedef ILockBytes FAR* LPLOCKBYTES;
+
+
+
+/****** IStream Interface ***************************************************/
+
+
+#undef INTERFACE
+#define INTERFACE IStream
+
+DECLARE_INTERFACE_(IStream, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IStream methods ***
+ STDMETHOD(Read) (THIS_ VOID HUGEP *pv,
+ ULONG cb, ULONG FAR *pcbRead) PURE;
+ STDMETHOD(Write) (THIS_ VOID const HUGEP *pv,
+ ULONG cb,
+ ULONG FAR *pcbWritten) PURE;
+ STDMETHOD(Seek) (THIS_ LARGE_INTEGER dlibMove,
+ DWORD dwOrigin,
+ ULARGE_INTEGER FAR *plibNewPosition) PURE;
+ STDMETHOD(SetSize) (THIS_ ULARGE_INTEGER libNewSize) PURE;
+ STDMETHOD(CopyTo) (THIS_ IStream FAR *pstm,
+ ULARGE_INTEGER cb,
+ ULARGE_INTEGER FAR *pcbRead,
+ ULARGE_INTEGER FAR *pcbWritten) PURE;
+ STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags) PURE;
+ STDMETHOD(Revert) (THIS) PURE;
+ STDMETHOD(LockRegion) (THIS_ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) PURE;
+ STDMETHOD(UnlockRegion) (THIS_ ULARGE_INTEGER libOffset,
+ ULARGE_INTEGER cb,
+ DWORD dwLockType) PURE;
+ STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
+ STDMETHOD(Clone)(THIS_ IStream FAR * FAR *ppstm) PURE;
+};
+
+typedef IStream FAR* LPSTREAM;
+
+
+
+/****** IStorage Interface **************************************************/
+
+#undef INTERFACE
+#define INTERFACE IStorage
+
+DECLARE_INTERFACE_(IStorage, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IStorage methods ***
+ STDMETHOD(CreateStream) (THIS_ const char FAR* pwcsName,
+ DWORD grfMode,
+ DWORD reserved1,
+ DWORD reserved2,
+ IStream FAR *FAR *ppstm) PURE;
+ STDMETHOD(OpenStream) (THIS_ const char FAR* pwcsName,
+ void FAR *reserved1,
+ DWORD grfMode,
+ DWORD reserved2,
+ IStream FAR *FAR *ppstm) PURE;
+ STDMETHOD(CreateStorage) (THIS_ const char FAR* pwcsName,
+ DWORD grfMode,
+ DWORD reserved1,
+ DWORD reserved2,
+ IStorage FAR *FAR *ppstg) PURE;
+ STDMETHOD(OpenStorage) (THIS_ const char FAR* pwcsName,
+ IStorage FAR *pstgPriority,
+ DWORD grfMode,
+ SNB snbExclude,
+ DWORD reserved,
+ IStorage FAR *FAR *ppstg) PURE;
+ STDMETHOD(CopyTo) (THIS_ DWORD ciidExclude,
+ IID const FAR *rgiidExclude,
+ SNB snbExclude,
+ IStorage FAR *pstgDest) PURE;
+ STDMETHOD(MoveElementTo) (THIS_ char const FAR* lpszName,
+ IStorage FAR *pstgDest,
+ char const FAR* lpszNewName,
+ DWORD grfFlags) PURE;
+ STDMETHOD(Commit) (THIS_ DWORD grfCommitFlags) PURE;
+ STDMETHOD(Revert) (THIS) PURE;
+ STDMETHOD(EnumElements) (THIS_ DWORD reserved1,
+ void FAR *reserved2,
+ DWORD reserved3,
+ IEnumSTATSTG FAR *FAR *ppenm) PURE;
+ STDMETHOD(DestroyElement) (THIS_ const char FAR* pwcsName) PURE;
+ STDMETHOD(RenameElement) (THIS_ const char FAR* pwcsOldName,
+ const char FAR* pwcsNewName) PURE;
+ STDMETHOD(SetElementTimes) (THIS_ const char FAR *lpszName,
+ FILETIME const FAR *pctime,
+ FILETIME const FAR *patime,
+ FILETIME const FAR *pmtime) PURE;
+ STDMETHOD(SetClass) (THIS_ REFCLSID clsid) PURE;
+ STDMETHOD(SetStateBits) (THIS_ DWORD grfStateBits, DWORD grfMask) PURE;
+ STDMETHOD(Stat) (THIS_ STATSTG FAR *pstatstg, DWORD grfStatFlag) PURE;
+};
+
+typedef IStorage FAR* LPSTORAGE;
+
+
+
+/****** IRootStorage Interface **********************************************/
+
+#undef INTERFACE
+#define INTERFACE IRootStorage
+
+DECLARE_INTERFACE_(IRootStorage, IUnknown)
+{
+ // *** IUnknown methods ***
+ STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE;
+ STDMETHOD_(ULONG,AddRef) (THIS) PURE;
+ STDMETHOD_(ULONG,Release) (THIS) PURE;
+
+ // *** IRootStorage methods ***
+ STDMETHOD(SwitchToFile) (THIS_ LPSTR lpstrFile) PURE;
+};
+
+typedef IRootStorage FAR* LPROOTSTORAGE;
+
+
+
+/****** Storage API Prototypes ********************************************/
+
+STDAPI StgCreateDocfile(const char FAR* pwcsName,
+ DWORD grfMode,
+ DWORD reserved,
+ IStorage FAR * FAR *ppstgOpen);
+STDAPI StgCreateDocfileOnILockBytes(ILockBytes FAR *plkbyt,
+ DWORD grfMode,
+ DWORD reserved,
+ IStorage FAR * FAR *ppstgOpen);
+STDAPI StgOpenStorage(const char FAR* pwcsName,
+ IStorage FAR *pstgPriority,
+ DWORD grfMode,
+ SNB snbExclude,
+ DWORD reserved,
+ IStorage FAR * FAR *ppstgOpen);
+STDAPI StgOpenStorageOnILockBytes(ILockBytes FAR *plkbyt,
+ IStorage FAR *pstgPriority,
+ DWORD grfMode,
+ SNB snbExclude,
+ DWORD reserved,
+ IStorage FAR * FAR *ppstgOpen);
+STDAPI StgIsStorageFile(const char FAR* pwcsName);
+STDAPI StgIsStorageILockBytes(ILockBytes FAR* plkbyt);
+
+STDAPI StgSetTimes(char const FAR* lpszName,
+ FILETIME const FAR* pctime,
+ FILETIME const FAR* patime,
+ FILETIME const FAR* pmtime);
+
+#endif