home *** CD-ROM | disk | FTP | other *** search
/ PC Format (South-Africa) 2001 June / PCFJune.iso / Xenon / C++ / FreeCommandLineTools.exe / Include / objbase.h < prev    next >
Encoding:
C/C++ Source or Header  |  2000-01-31  |  30.1 KB  |  842 lines

  1. #pragma option push -b -a8 -pc -A- /*P_O_Push*/
  2. //+---------------------------------------------------------------------------
  3. //
  4. //  Microsoft Windows
  5. //  Copyright (C) Microsoft Corporation, 1992-1999.
  6. //
  7. //  File:       objbase.h
  8. //
  9. //  Contents:   Component object model defintions.
  10. //
  11. //----------------------------------------------------------------------------
  12.  
  13. #include <rpc.h>
  14. #include <rpcndr.h>
  15.  
  16. #if !defined( _OBJBASE_H_ )
  17. #define _OBJBASE_H_
  18.  
  19. #if _MSC_VER > 1000
  20. #pragma once
  21. #endif
  22.  
  23. #include <pshpack8.h>
  24.  
  25. #ifdef _MAC
  26. #ifndef _WLM_NOFORCE_LIBS
  27.  
  28. #ifdef _WLMDLL
  29.         #ifdef _DEBUG
  30.                 #pragma comment(lib, "oledlgd.lib")
  31.                 #pragma comment(lib, "msvcoled.lib")
  32.         #else
  33.                 #pragma comment(lib, "oledlg.lib")
  34.                 #pragma comment(lib, "msvcole.lib")
  35.         #endif
  36. #else
  37.         #ifdef _DEBUG
  38.                 #pragma comment(lib, "wlmoled.lib")
  39.                 #pragma comment(lib, "ole2uid.lib")
  40.         #else
  41.                 #pragma comment(lib, "wlmole.lib")
  42.                 #pragma comment(lib, "ole2ui.lib")
  43.         #endif
  44.         #pragma data_seg(".drectve")
  45.         static char _gszWlmOLEUIResourceDirective[] = "/macres:ole2ui.rsc";
  46.         #pragma data_seg()
  47. #endif
  48.  
  49. #pragma comment(lib, "uuid.lib")
  50.  
  51. #ifdef _DEBUG
  52.     #pragma comment(lib, "ole2d.lib")
  53.     #pragma comment(lib, "ole2autd.lib")
  54. #else
  55.     #pragma comment(lib, "ole2.lib")
  56.     #pragma comment(lib, "ole2auto.lib")
  57. #endif
  58.  
  59. #endif // !_WLM_NOFORCE_LIBS
  60. #endif // _MAC
  61.  
  62. #ifdef _OLE32_
  63. #define WINOLEAPI        STDAPI
  64. #define WINOLEAPI_(type) STDAPI_(type)
  65. #else
  66.  
  67. #ifdef _68K_
  68. #ifndef REQUIRESAPPLEPASCAL
  69. #define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT HRESULT PASCAL
  70. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type PASCAL
  71. #else
  72. #define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT PASCAL HRESULT
  73. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT PASCAL type
  74. #endif
  75. #else
  76. #define WINOLEAPI        EXTERN_C DECLSPEC_IMPORT HRESULT STDAPICALLTYPE
  77. #define WINOLEAPI_(type) EXTERN_C DECLSPEC_IMPORT type STDAPICALLTYPE
  78. #endif
  79.  
  80. #endif
  81.  
  82. /****** Interface Declaration ***********************************************/
  83.  
  84. /*
  85.  *      These are macros for declaring interfaces.  They exist so that
  86.  *      a single definition of the interface is simulataneously a proper
  87.  *      declaration of the interface structures (C++ abstract classes)
  88.  *      for both C and C++.
  89.  *
  90.  *      DECLARE_INTERFACE(iface) is used to declare an interface that does
  91.  *      not derive from a base interface.
  92.  *      DECLARE_INTERFACE_(iface, baseiface) is used to declare an interface
  93.  *      that does derive from a base interface.
  94.  *
  95.  *      By default if the source file has a .c extension the C version of
  96.  *      the interface declaratations will be expanded; if it has a .cpp
  97.  *      extension the C++ version will be expanded. if you want to force
  98.  *      the C version expansion even though the source file has a .cpp
  99.  *      extension, then define the macro "CINTERFACE".
  100.  *      eg.     cl -DCINTERFACE file.cpp
  101.  *
  102.  *      Example Interface declaration:
  103.  *
  104.  *          #undef  INTERFACE
  105.  *          #define INTERFACE   IClassFactory
  106.  *
  107.  *          DECLARE_INTERFACE_(IClassFactory, IUnknown)
  108.  *          {
  109.  *              // *** IUnknown methods ***
  110.  *              STDMETHOD(QueryInterface) (THIS_
  111.  *                                        REFIID riid,
  112.  *                                        LPVOID FAR* ppvObj) PURE;
  113.  *              STDMETHOD_(ULONG,AddRef) (THIS) PURE;
  114.  *              STDMETHOD_(ULONG,Release) (THIS) PURE;
  115.  *
  116.  *              // *** IClassFactory methods ***
  117.  *              STDMETHOD(CreateInstance) (THIS_
  118.  *                                        LPUNKNOWN pUnkOuter,
  119.  *                                        REFIID riid,
  120.  *                                        LPVOID FAR* ppvObject) PURE;
  121.  *          };
  122.  *
  123.  *      Example C++ expansion:
  124.  *
  125.  *          struct FAR IClassFactory : public IUnknown
  126.  *          {
  127.  *              virtual HRESULT STDMETHODCALLTYPE QueryInterface(
  128.  *                                                  IID FAR& riid,
  129.  *                                                  LPVOID FAR* ppvObj) = 0;
  130.  *              virtual HRESULT STDMETHODCALLTYPE AddRef(void) = 0;
  131.  *              virtual HRESULT STDMETHODCALLTYPE Release(void) = 0;
  132.  *              virtual HRESULT STDMETHODCALLTYPE CreateInstance(
  133.  *                                              LPUNKNOWN pUnkOuter,
  134.  *                                              IID FAR& riid,
  135.  *                                              LPVOID FAR* ppvObject) = 0;
  136.  *          };
  137.  *
  138.  *          NOTE: Our documentation says '#define interface class' but we use
  139.  *          'struct' instead of 'class' to keep a lot of 'public:' lines
  140.  *          out of the interfaces.  The 'FAR' forces the 'this' pointers to
  141.  *          be far, which is what we need.
  142.  *
  143.  *      Example C expansion:
  144.  *
  145.  *          typedef struct IClassFactory
  146.  *          {
  147.  *              const struct IClassFactoryVtbl FAR* lpVtbl;
  148.  *          } IClassFactory;
  149.  *
  150.  *          typedef struct IClassFactoryVtbl IClassFactoryVtbl;
  151.  *
  152.  *          struct IClassFactoryVtbl
  153.  *          {
  154.  *              HRESULT (STDMETHODCALLTYPE * QueryInterface) (
  155.  *                                                  IClassFactory FAR* This,
  156.  *                                                  IID FAR* riid,
  157.  *                                                  LPVOID FAR* ppvObj) ;
  158.  *              HRESULT (STDMETHODCALLTYPE * AddRef) (IClassFactory FAR* This) ;
  159.  *              HRESULT (STDMETHODCALLTYPE * Release) (IClassFactory FAR* This) ;
  160.  *              HRESULT (STDMETHODCALLTYPE * CreateInstance) (
  161.  *                                                  IClassFactory FAR* This,
  162.  *                                                  LPUNKNOWN pUnkOuter,
  163.  *                                                  IID FAR* riid,
  164.  *                                                  LPVOID FAR* ppvObject);
  165.  *              HRESULT (STDMETHODCALLTYPE * LockServer) (
  166.  *                                                  IClassFactory FAR* This,
  167.  *                                                  BOOL fLock);
  168.  *          };
  169.  */
  170.  
  171. #if defined(__cplusplus) && !defined(CINTERFACE)
  172. //#define interface               struct FAR
  173. #define interface struct
  174. #define STDMETHOD(method)       virtual HRESULT STDMETHODCALLTYPE method
  175. #define STDMETHOD_(type,method) virtual type STDMETHODCALLTYPE method
  176. #define STDMETHODV(method)       virtual HRESULT STDMETHODVCALLTYPE method
  177. #define STDMETHODV_(type,method) virtual type STDMETHODVCALLTYPE method
  178. #define PURE                    = 0
  179. #define THIS_
  180. #define THIS                    void
  181. #define DECLARE_INTERFACE(iface)    interface DECLSPEC_NOVTABLE iface
  182. #define DECLARE_INTERFACE_(iface, baseiface)    interface DECLSPEC_NOVTABLE iface : public baseiface
  183.  
  184.  
  185. #if !defined(BEGIN_INTERFACE)
  186. #if defined(_MPPC_)  && \
  187.     ( (defined(_MSC_VER) || defined(__SC__) || defined(__MWERKS__)) && \
  188.     !defined(NO_NULL_VTABLE_ENTRY) )
  189.    #define BEGIN_INTERFACE virtual void a() {}
  190.    #define END_INTERFACE
  191. #else
  192.    #define BEGIN_INTERFACE
  193.    #define END_INTERFACE
  194. #endif
  195. #endif
  196.  
  197. #else
  198.  
  199. #define interface               struct
  200.  
  201. #define STDMETHOD(method)       HRESULT (STDMETHODCALLTYPE * method)
  202. #define STDMETHOD_(type,method) type (STDMETHODCALLTYPE * method)
  203. #define STDMETHODV(method)       HRESULT (STDMETHODVCALLTYPE * method)
  204. #define STDMETHODV_(type,method) type (STDMETHODVCALLTYPE * method)
  205.  
  206. #if !defined(BEGIN_INTERFACE)
  207. #if defined(_MPPC_)
  208.     #define BEGIN_INTERFACE       void    *b;
  209.     #define END_INTERFACE
  210. #else
  211.     #define BEGIN_INTERFACE
  212.     #define END_INTERFACE
  213. #endif
  214. #endif
  215.  
  216.  
  217. #define PURE
  218. #define THIS_                   INTERFACE FAR* This,
  219. #define THIS                    INTERFACE FAR* This
  220. #ifdef CONST_VTABLE
  221. #undef CONST_VTBL
  222. #define CONST_VTBL const
  223. #define DECLARE_INTERFACE(iface)    typedef interface iface { \
  224.                                     const struct iface##Vtbl FAR* lpVtbl; \
  225.                                 } iface; \
  226.                                 typedef const struct iface##Vtbl iface##Vtbl; \
  227.                                 const struct iface##Vtbl
  228. #else
  229. #undef CONST_VTBL
  230. #define CONST_VTBL
  231. #define DECLARE_INTERFACE(iface)    typedef interface iface { \
  232.                                     struct iface##Vtbl FAR* lpVtbl; \
  233.                                 } iface; \
  234.                                 typedef struct iface##Vtbl iface##Vtbl; \
  235.                                 struct iface##Vtbl
  236. #endif
  237. #define DECLARE_INTERFACE_(iface, baseiface)    DECLARE_INTERFACE(iface)
  238.  
  239. #endif
  240.  
  241.  
  242.  
  243.  
  244. /****** Additional basic types **********************************************/
  245.  
  246.  
  247. #ifndef FARSTRUCT
  248. #ifdef __cplusplus
  249. #define FARSTRUCT   FAR
  250. #else
  251. #define FARSTRUCT
  252. #endif  // __cplusplus
  253. #endif  // FARSTRUCT
  254.  
  255.  
  256.  
  257. #ifndef HUGEP
  258. #if defined(_WIN32) || defined(_MPPC_)
  259. #define HUGEP
  260. #else
  261. #define HUGEP __huge
  262. #endif // WIN32
  263. #endif // HUGEP
  264.  
  265.  
  266. #ifdef _MAC
  267. #if !defined(OLE2ANSI)
  268. #define OLE2ANSI
  269. #endif
  270. #endif
  271.  
  272. #include <stdlib.h>
  273.  
  274. #define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v))
  275.  
  276. #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v))
  277.  
  278.  
  279.  
  280.  
  281.  
  282.  
  283. #define CLSCTX_INPROC           (CLSCTX_INPROC_SERVER|CLSCTX_INPROC_HANDLER)
  284.  
  285. // With DCOM, CLSCTX_REMOTE_SERVER should be included
  286. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  287. #define CLSCTX_ALL              (CLSCTX_INPROC_SERVER| \
  288.                                  CLSCTX_INPROC_HANDLER| \
  289.                                  CLSCTX_LOCAL_SERVER| \
  290.                                  CLSCTX_REMOTE_SERVER)
  291.  
  292. #define CLSCTX_SERVER           (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER|CLSCTX_REMOTE_SERVER)
  293. #else
  294. #define CLSCTX_ALL              (CLSCTX_INPROC_SERVER| \
  295.                                  CLSCTX_INPROC_HANDLER| \
  296.                                  CLSCTX_LOCAL_SERVER )
  297.  
  298. #define CLSCTX_SERVER           (CLSCTX_INPROC_SERVER|CLSCTX_LOCAL_SERVER)
  299. #endif
  300.  
  301.  
  302. // class registration flags; passed to CoRegisterClassObject
  303. typedef enum tagREGCLS
  304. {
  305.     REGCLS_SINGLEUSE = 0,       // class object only generates one instance
  306.     REGCLS_MULTIPLEUSE = 1,     // same class object genereates multiple inst.
  307.                                 // and local automatically goes into inproc tbl.
  308.     REGCLS_MULTI_SEPARATE = 2,  // multiple use, but separate control over each
  309.                                 // context.
  310.     REGCLS_SUSPENDED      = 4,  // register is as suspended, will be activated
  311.                                 // when app calls CoResumeClassObjects
  312.     REGCLS_SURROGATE      = 8   // must be used when a surrogate process
  313.                                 // is registering a class object that will be
  314.                                 // loaded in the surrogate
  315. } REGCLS;
  316.  
  317. // interface marshaling definitions
  318. #define MARSHALINTERFACE_MIN 500 // minimum number of bytes for interface marshl
  319.  
  320.  
  321. //
  322. // Common typedefs for paramaters used in Storage API's, gleamed from storage.h
  323. // Also contains Storage error codes, which should be moved into the storage
  324. // idl files.
  325. //
  326.  
  327.  
  328. #define CWCSTORAGENAME 32
  329.  
  330. /* Storage instantiation modes */
  331. #define STGM_DIRECT             0x00000000L
  332. #define STGM_TRANSACTED         0x00010000L
  333. #define STGM_SIMPLE             0x08000000L
  334.  
  335. #define STGM_READ               0x00000000L
  336. #define STGM_WRITE              0x00000001L
  337. #define STGM_READWRITE          0x00000002L
  338.  
  339. #define STGM_SHARE_DENY_NONE    0x00000040L
  340. #define STGM_SHARE_DENY_READ    0x00000030L
  341. #define STGM_SHARE_DENY_WRITE   0x00000020L
  342. #define STGM_SHARE_EXCLUSIVE    0x00000010L
  343.  
  344. #define STGM_PRIORITY           0x00040000L
  345. #define STGM_DELETEONRELEASE    0x04000000L
  346. #if (WINVER >= 400)
  347. #define STGM_NOSCRATCH          0x00100000L
  348. #endif /* WINVER */
  349.  
  350. #define STGM_CREATE             0x00001000L
  351. #define STGM_CONVERT            0x00020000L
  352. #define STGM_FAILIFTHERE        0x00000000L
  353.  
  354. #define STGM_NOSNAPSHOT         0x00200000L
  355. #if (_WIN32_WINNT >= 0x0500)
  356. #define STGM_DIRECT_SWMR        0x00400000L
  357. #endif
  358.  
  359. /*  flags for internet asyncronous and layout docfile */
  360. #define ASYNC_MODE_COMPATIBILITY    0x00000001L
  361. #define ASYNC_MODE_DEFAULT          0x00000000L
  362.  
  363. #define STGTY_REPEAT                0x00000100L
  364. #define STG_TOEND                   0xFFFFFFFFL
  365.  
  366. #define STG_LAYOUT_SEQUENTIAL       0x00000000L
  367. #define STG_LAYOUT_INTERLEAVED      0x00000001L
  368.  
  369. #define STGFMT_STORAGE          0
  370. #define STGFMT_NATIVE           1
  371. #define STGFMT_FILE             3
  372. #define STGFMT_ANY              4
  373. #define STGFMT_DOCFILE          5
  374.  
  375. // This is a legacy define to allow old component to builds
  376. #define STGFMT_DOCUMENT         0
  377.  
  378. /* here is where we pull in the MIDL generated headers for the interfaces */
  379. typedef interface    IRpcStubBuffer     IRpcStubBuffer;
  380. typedef interface    IRpcChannelBuffer  IRpcChannelBuffer;
  381.  
  382. #include <wtypes.h>
  383. #include <unknwn.h>
  384. #include <objidl.h>
  385.  
  386. #ifdef _OLE32_
  387. #ifdef _OLE32PRIV_
  388. BOOL _fastcall wIsEqualGUID(REFGUID rguid1, REFGUID rguid2);
  389. #define IsEqualGUID(rguid1, rguid2) wIsEqualGUID(rguid1, rguid2)
  390. #else
  391. #define __INLINE_ISEQUAL_GUID
  392. #endif  // _OLE32PRIV_
  393. #endif  // _OLE32_
  394.  
  395. #include <guiddef.h>
  396.  
  397. #ifndef INITGUID
  398. #include <cguid.h>
  399. #endif
  400.  
  401. // COM initialization flags; passed to CoInitialize.
  402. typedef enum tagCOINIT
  403. {
  404.   COINIT_APARTMENTTHREADED  = 0x2,      // Apartment model
  405.  
  406. #if  (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  407.   // These constants are only valid on Windows NT 4.0
  408.   COINIT_MULTITHREADED      = 0x0,      // OLE calls objects on any thread.
  409.   COINIT_DISABLE_OLE1DDE    = 0x4,      // Don't use DDE for Ole1 support.
  410.   COINIT_SPEED_OVER_MEMORY  = 0x8,      // Trade memory for speed.
  411. #endif // DCOM
  412. } COINIT;
  413.  
  414.  
  415.  
  416.  
  417.  
  418. /****** STD Object API Prototypes *****************************************/
  419.  
  420. WINOLEAPI_(DWORD) CoBuildVersion( VOID );
  421.  
  422. /* init/uninit */
  423.  
  424. WINOLEAPI  CoInitialize(IN LPVOID pvReserved);
  425. WINOLEAPI_(void)  CoUninitialize(void);
  426. WINOLEAPI  CoGetMalloc(IN DWORD dwMemContext, OUT LPMALLOC FAR* ppMalloc);
  427. WINOLEAPI_(DWORD) CoGetCurrentProcess(void);
  428. WINOLEAPI  CoRegisterMallocSpy(IN LPMALLOCSPY pMallocSpy);
  429. WINOLEAPI  CoRevokeMallocSpy(void);
  430. WINOLEAPI  CoCreateStandardMalloc(IN DWORD memctx, OUT IMalloc FAR* FAR* ppMalloc);
  431.  
  432. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  433. WINOLEAPI  CoInitializeEx(IN LPVOID pvReserved, IN DWORD dwCoInit);
  434. #endif // DCOM
  435.  
  436. #if DBG == 1
  437. WINOLEAPI_(ULONG) DebugCoGetRpcFault( void );
  438. WINOLEAPI_(void) DebugCoSetRpcFault( ULONG );
  439. #endif
  440.  
  441. /* COM+ APIs */
  442.  
  443. WINOLEAPI     CoGetObjectContext(IN REFIID riid, OUT LPVOID FAR* ppv);
  444.  
  445. /* register/revoke/get class objects */
  446.  
  447. WINOLEAPI  CoGetClassObject(IN REFCLSID rclsid, IN DWORD dwClsContext, IN LPVOID pvReserved,
  448.                     IN REFIID riid, OUT LPVOID FAR* ppv);
  449. WINOLEAPI  CoRegisterClassObject(IN REFCLSID rclsid, IN LPUNKNOWN pUnk,
  450.                     IN DWORD dwClsContext, IN DWORD flags, OUT LPDWORD lpdwRegister);
  451. WINOLEAPI  CoRevokeClassObject(IN DWORD dwRegister);
  452. WINOLEAPI  CoResumeClassObjects(void);
  453. WINOLEAPI  CoSuspendClassObjects(void);
  454. WINOLEAPI_(ULONG) CoAddRefServerProcess(void);
  455. WINOLEAPI_(ULONG) CoReleaseServerProcess(void);
  456. WINOLEAPI  CoGetPSClsid(IN REFIID riid, OUT CLSID *pClsid);
  457. WINOLEAPI  CoRegisterPSClsid(IN REFIID riid, IN REFCLSID rclsid);
  458.  
  459. // Registering surrogate processes
  460. WINOLEAPI  CoRegisterSurrogate(IN LPSURROGATE pSurrogate);
  461.  
  462. /* marshaling interface pointers */
  463.  
  464. WINOLEAPI CoGetMarshalSizeMax(OUT ULONG *pulSize, IN REFIID riid, IN LPUNKNOWN pUnk,
  465.                     IN DWORD dwDestContext, IN LPVOID pvDestContext, IN DWORD mshlflags);
  466. WINOLEAPI CoMarshalInterface(IN LPSTREAM pStm, IN REFIID riid, IN LPUNKNOWN pUnk,
  467.                     IN DWORD dwDestContext, IN LPVOID pvDestContext, IN DWORD mshlflags);
  468. WINOLEAPI CoUnmarshalInterface(IN LPSTREAM pStm, IN REFIID riid, OUT LPVOID FAR* ppv);
  469. WINOLEAPI CoMarshalHresult(IN LPSTREAM pstm, IN HRESULT hresult);
  470. WINOLEAPI CoUnmarshalHresult(IN LPSTREAM pstm, OUT HRESULT FAR * phresult);
  471. WINOLEAPI CoReleaseMarshalData(IN LPSTREAM pStm);
  472. WINOLEAPI CoDisconnectObject(IN LPUNKNOWN pUnk, IN DWORD dwReserved);
  473. WINOLEAPI CoLockObjectExternal(IN LPUNKNOWN pUnk, IN BOOL fLock, IN BOOL fLastUnlockReleases);
  474. WINOLEAPI CoGetStandardMarshal(IN REFIID riid, IN LPUNKNOWN pUnk,
  475.                     IN DWORD dwDestContext, IN LPVOID pvDestContext, IN DWORD mshlflags,
  476.                     OUT LPMARSHAL FAR* ppMarshal);
  477.  
  478.  
  479. WINOLEAPI CoGetStdMarshalEx(IN LPUNKNOWN pUnkOuter, IN DWORD smexflags,
  480.                             OUT LPUNKNOWN FAR* ppUnkInner);
  481.  
  482. /* flags for CoGetStdMarshalEx */
  483. typedef enum tagSTDMSHLFLAGS
  484. {
  485.     SMEXF_SERVER     = 0x01,       // server side aggregated std marshaler
  486.     SMEXF_HANDLER    = 0x02        // client side (handler) agg std marshaler
  487. } STDMSHLFLAGS;
  488.  
  489.  
  490. WINOLEAPI_(BOOL) CoIsHandlerConnected(IN LPUNKNOWN pUnk);
  491.  
  492. // Apartment model inter-thread interface passing helpers
  493. WINOLEAPI CoMarshalInterThreadInterfaceInStream(IN REFIID riid, IN LPUNKNOWN pUnk,
  494.                     OUT LPSTREAM *ppStm);
  495.  
  496. WINOLEAPI CoGetInterfaceAndReleaseStream(IN LPSTREAM pStm, IN REFIID iid,
  497.                     OUT LPVOID FAR* ppv);
  498.  
  499. WINOLEAPI CoCreateFreeThreadedMarshaler(IN LPUNKNOWN  punkOuter,
  500.                     OUT LPUNKNOWN *ppunkMarshal);
  501.  
  502. /* dll loading helpers; keeps track of ref counts and unloads all on exit */
  503.  
  504. WINOLEAPI_(HINSTANCE) CoLoadLibrary(IN LPOLESTR lpszLibName, IN BOOL bAutoFree);
  505. WINOLEAPI_(void) CoFreeLibrary(IN HINSTANCE hInst);
  506. WINOLEAPI_(void) CoFreeAllLibraries(void);
  507. WINOLEAPI_(void) CoFreeUnusedLibraries(void);
  508.  
  509.  
  510. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  511.  
  512. /* Call Security. */
  513.  
  514. WINOLEAPI CoInitializeSecurity(
  515.                     IN PSECURITY_DESCRIPTOR         pSecDesc,
  516.                     IN LONG                         cAuthSvc,
  517.                     IN SOLE_AUTHENTICATION_SERVICE *asAuthSvc,
  518.                     IN void                        *pReserved1,
  519.                     IN DWORD                        dwAuthnLevel,
  520.                     IN DWORD                        dwImpLevel,
  521.                     IN void                        *pAuthList,
  522.                     IN DWORD                        dwCapabilities,
  523.                     IN void                        *pReserved3 );
  524. WINOLEAPI CoGetCallContext( IN REFIID riid, OUT void **ppInterface );
  525. WINOLEAPI CoQueryProxyBlanket(
  526.     IN  IUnknown                  *pProxy,
  527.     OUT DWORD                     *pwAuthnSvc,
  528.     OUT DWORD                     *pAuthzSvc,
  529.     OUT OLECHAR                  **pServerPrincName,
  530.     OUT DWORD                     *pAuthnLevel,
  531.     OUT DWORD                     *pImpLevel,
  532.     OUT RPC_AUTH_IDENTITY_HANDLE  *pAuthInfo,
  533.     OUT DWORD                     *pCapabilites );
  534. WINOLEAPI CoSetProxyBlanket(
  535.     IN IUnknown                 *pProxy,
  536.     IN DWORD                     dwAuthnSvc,
  537.     IN DWORD                     dwAuthzSvc,
  538.     IN OLECHAR                  *pServerPrincName,
  539.     IN DWORD                     dwAuthnLevel,
  540.     IN DWORD                     dwImpLevel,
  541.     IN RPC_AUTH_IDENTITY_HANDLE  pAuthInfo,
  542.     IN DWORD                     dwCapabilities );
  543. WINOLEAPI CoCopyProxy(
  544.     IN  IUnknown    *pProxy,
  545.     OUT IUnknown   **ppCopy );
  546. WINOLEAPI CoQueryClientBlanket(
  547.     OUT DWORD             *pAuthnSvc,
  548.     OUT DWORD             *pAuthzSvc,
  549.     OUT OLECHAR          **pServerPrincName,
  550.     OUT DWORD             *pAuthnLevel,
  551.     OUT DWORD             *pImpLevel,
  552.     OUT RPC_AUTHZ_HANDLE  *pPrivs,
  553.     OUT DWORD             *pCapabilities );
  554. WINOLEAPI CoImpersonateClient();
  555. WINOLEAPI CoRevertToSelf();
  556. WINOLEAPI CoQueryAuthenticationServices(
  557.     OUT DWORD *pcAuthSvc,
  558.     OUT SOLE_AUTHENTICATION_SERVICE **asAuthSvc );
  559. WINOLEAPI CoSwitchCallContext( IN IUnknown *pNewObject, OUT IUnknown **ppOldObject );
  560.  
  561. #define COM_RIGHTS_EXECUTE 1
  562. #define COM_RIGHTS_SAFE_FOR_SCRIPTING 2
  563.  
  564. #endif // DCOM
  565.  
  566. /* helper for creating instances */
  567.  
  568. WINOLEAPI CoCreateInstance(IN REFCLSID rclsid, IN LPUNKNOWN pUnkOuter,
  569.                     IN DWORD dwClsContext, IN REFIID riid, OUT LPVOID FAR* ppv);
  570.  
  571.  
  572. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  573.  
  574. WINOLEAPI CoGetInstanceFromFile(
  575.     IN COSERVERINFO *              pServerInfo,
  576.     IN CLSID       *               pClsid,
  577.     IN IUnknown    *               punkOuter, // only relevant locally
  578.     IN DWORD                       dwClsCtx,
  579.     IN DWORD                       grfMode,
  580.     IN OLECHAR *                   pwszName,
  581.     IN DWORD                       dwCount,
  582.     IN OUT MULTI_QI    *           pResults );
  583.  
  584. WINOLEAPI CoGetInstanceFromIStorage(
  585.     IN COSERVERINFO *              pServerInfo,
  586.     IN CLSID       *               pClsid,
  587.     IN IUnknown    *               punkOuter, // only relevant locally
  588.     IN DWORD                       dwClsCtx,
  589.     IN struct IStorage *           pstg,
  590.     IN DWORD                       dwCount,
  591.     IN OUT MULTI_QI    *           pResults );
  592.  
  593. WINOLEAPI CoCreateInstanceEx(
  594.     IN REFCLSID                    Clsid,
  595.     IN IUnknown    *               punkOuter, // only relevant locally
  596.     IN DWORD                       dwClsCtx,
  597.     IN COSERVERINFO *              pServerInfo,
  598.     IN DWORD                       dwCount,
  599.     IN OUT MULTI_QI    *           pResults );
  600.  
  601. #endif // DCOM
  602.  
  603. /* Call related APIs */
  604. #if (_WIN32_WINNT >= 0x0500 ) || defined(_WIN32_DCOM) // DCOM
  605.  
  606. WINOLEAPI CoGetCancelObject(IN DWORD dwThreadId, IN REFIID iid, OUT void **ppUnk);
  607. WINOLEAPI CoSetCancelObject(IN IUnknown *pUnk);
  608. WINOLEAPI CoCancelCall(IN DWORD dwThreadId, IN ULONG ulTimeout);
  609. WINOLEAPI CoTestCancel();
  610. WINOLEAPI CoEnableCallCancellation(IN LPVOID pReserved);
  611. WINOLEAPI CoDisableCallCancellation(IN LPVOID pReserved);
  612.  
  613.  
  614. #endif
  615.  
  616. /* other helpers */
  617.  
  618. WINOLEAPI StringFromCLSID(IN REFCLSID rclsid, OUT LPOLESTR FAR* lplpsz);
  619. WINOLEAPI CLSIDFromString(IN LPOLESTR lpsz, OUT LPCLSID pclsid);
  620. WINOLEAPI StringFromIID(IN REFIID rclsid, OUT LPOLESTR FAR* lplpsz);
  621. WINOLEAPI IIDFromString(IN LPOLESTR lpsz, OUT LPIID lpiid);
  622. WINOLEAPI_(BOOL) CoIsOle1Class(IN REFCLSID rclsid);
  623. WINOLEAPI ProgIDFromCLSID (IN REFCLSID clsid, OUT LPOLESTR FAR* lplpszProgID);
  624. WINOLEAPI CLSIDFromProgID (IN LPCOLESTR lpszProgID, OUT LPCLSID lpclsid);
  625. WINOLEAPI CLSIDFromProgIDEx (IN LPCOLESTR lpszProgID, OUT LPCLSID lpclsid);
  626. WINOLEAPI_(int) StringFromGUID2(IN REFGUID rguid, OUT LPOLESTR lpsz, IN int cchMax);
  627.  
  628. WINOLEAPI CoCreateGuid(OUT GUID FAR *pguid);
  629.  
  630. WINOLEAPI_(BOOL) CoFileTimeToDosDateTime(
  631.                  IN FILETIME FAR* lpFileTime, OUT LPWORD lpDosDate, OUT LPWORD lpDosTime);
  632. WINOLEAPI_(BOOL) CoDosDateTimeToFileTime(
  633.                        IN WORD nDosDate, IN WORD nDosTime, OUT FILETIME FAR* lpFileTime);
  634. WINOLEAPI  CoFileTimeNow( OUT FILETIME FAR* lpFileTime );
  635.  
  636.  
  637. WINOLEAPI CoRegisterMessageFilter( IN LPMESSAGEFILTER lpMessageFilter,
  638.                                 OUT LPMESSAGEFILTER FAR* lplpMessageFilter );
  639.  
  640. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  641. WINOLEAPI CoRegisterChannelHook( IN REFGUID ExtensionUuid, IN IChannelHook *pChannelHook );
  642. #endif // DCOM
  643.  
  644. #if (_WIN32_WINNT >= 0x0400 ) || defined(_WIN32_DCOM) // DCOM
  645. /* Synchronization API */
  646.  
  647. WINOLEAPI CoWaitForMultipleHandles (IN DWORD dwFlags,
  648.                                     IN DWORD dwTimeout,
  649.                                     IN ULONG cHandles,
  650.                                     IN LPHANDLE pHandles,
  651.                                     OUT LPDWORD  lpdwindex);
  652.  
  653. /* Flags for Synchronization API and Classes */
  654.  
  655. typedef enum tagCOWAIT_FLAGS
  656. {
  657.   COWAIT_WAITALL = 1,
  658.   COWAIT_ALERTABLE = 2
  659. }COWAIT_FLAGS;
  660.  
  661. #endif // DCOM
  662.  
  663.  
  664. /* TreatAs APIS */
  665.  
  666. WINOLEAPI CoGetTreatAsClass(IN REFCLSID clsidOld, OUT LPCLSID pClsidNew);
  667. WINOLEAPI CoTreatAsClass(IN REFCLSID clsidOld, IN REFCLSID clsidNew);
  668.  
  669.  
  670. /* the server dlls must define their DllGetClassObject and DllCanUnloadNow
  671.  * to match these; the typedefs are located here to ensure all are changed at
  672.  * the same time.
  673.  */
  674.  
  675. //#ifdef _MAC
  676. //typedef STDAPICALLTYPE HRESULT (* LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
  677. //#else
  678. typedef HRESULT (STDAPICALLTYPE * LPFNGETCLASSOBJECT) (REFCLSID, REFIID, LPVOID *);
  679. //#endif
  680.  
  681. //#ifdef _MAC
  682. //typedef STDAPICALLTYPE HRESULT (* LPFNCANUNLOADNOW)(void);
  683. //#else
  684. typedef HRESULT (STDAPICALLTYPE * LPFNCANUNLOADNOW)(void);
  685. //#endif
  686.  
  687. STDAPI  DllGetClassObject(IN REFCLSID rclsid, IN REFIID riid, OUT LPVOID FAR* ppv);
  688.  
  689. STDAPI  DllCanUnloadNow(void);
  690.  
  691.  
  692. /****** Default Memory Allocation ******************************************/
  693. WINOLEAPI_(LPVOID) CoTaskMemAlloc(IN SIZE_T cb);
  694. WINOLEAPI_(LPVOID) CoTaskMemRealloc(IN LPVOID pv, IN SIZE_T cb);
  695. WINOLEAPI_(void)   CoTaskMemFree(IN LPVOID pv);
  696.  
  697. /****** DV APIs ***********************************************************/
  698.  
  699.  
  700. WINOLEAPI CreateDataAdviseHolder(OUT LPDATAADVISEHOLDER FAR* ppDAHolder);
  701.  
  702. WINOLEAPI CreateDataCache(IN LPUNKNOWN pUnkOuter, IN REFCLSID rclsid,
  703.                                         IN REFIID iid, OUT LPVOID FAR* ppv);
  704.  
  705.  
  706.  
  707.  
  708. /****** Storage API Prototypes ********************************************/
  709.  
  710.  
  711. WINOLEAPI StgCreateDocfile(IN const OLECHAR FAR* pwcsName,
  712.             IN DWORD grfMode,
  713.             IN DWORD reserved,
  714.             OUT IStorage FAR * FAR *ppstgOpen);
  715.  
  716. WINOLEAPI StgCreateDocfileOnILockBytes(IN ILockBytes FAR *plkbyt,
  717.                     IN DWORD grfMode,
  718.                     IN DWORD reserved,
  719.                     OUT IStorage FAR * FAR *ppstgOpen);
  720.  
  721. WINOLEAPI StgOpenStorage(IN const OLECHAR FAR* pwcsName,
  722.               IN  IStorage FAR *pstgPriority,
  723.               IN  DWORD grfMode,
  724.               IN  SNB snbExclude,
  725.               IN  DWORD reserved,
  726.               OUT IStorage FAR * FAR *ppstgOpen);
  727. WINOLEAPI StgOpenStorageOnILockBytes(IN ILockBytes FAR *plkbyt,
  728.                   IN  IStorage FAR *pstgPriority,
  729.                   IN  DWORD grfMode,
  730.                   IN  SNB snbExclude,
  731.                   IN  DWORD reserved,
  732.                   OUT IStorage FAR * FAR *ppstgOpen);
  733.  
  734. WINOLEAPI StgIsStorageFile(IN const OLECHAR FAR* pwcsName);
  735. WINOLEAPI StgIsStorageILockBytes(IN ILockBytes FAR* plkbyt);
  736.  
  737. WINOLEAPI StgSetTimes(IN OLECHAR const FAR* lpszName,
  738.                    IN FILETIME const FAR* pctime,
  739.                    IN FILETIME const FAR* patime,
  740.                    IN FILETIME const FAR* pmtime);
  741.  
  742. WINOLEAPI StgOpenAsyncDocfileOnIFillLockBytes( IN IFillLockBytes *pflb,
  743.              IN  DWORD grfMode,
  744.              IN  DWORD asyncFlags,
  745.              OUT IStorage **ppstgOpen);
  746.  
  747. WINOLEAPI StgGetIFillLockBytesOnILockBytes( IN ILockBytes *pilb,
  748.              OUT IFillLockBytes **ppflb);
  749.  
  750. WINOLEAPI StgGetIFillLockBytesOnFile(IN OLECHAR const *pwcsName,
  751.              OUT IFillLockBytes **ppflb);
  752.  
  753.  
  754. WINOLEAPI StgOpenLayoutDocfile(IN OLECHAR const *pwcsDfName,
  755.              IN  DWORD grfMode,
  756.              IN  DWORD reserved,
  757.              OUT IStorage **ppstgOpen);
  758.  
  759. // STG initialization options for StgCreateStorageEx and StgOpenStorageEx
  760. #define STGOPTIONS_VERSION 1
  761.  
  762. typedef struct tagSTGOPTIONS
  763. {
  764.     USHORT usVersion;            // Version 1
  765.     USHORT reserved;             // must be 0 for padding
  766.     ULONG ulSectorSize;          // docfile header sector size (512)
  767. } STGOPTIONS;
  768.  
  769. WINOLEAPI StgCreateStorageEx (IN const WCHAR* pwcsName,
  770.             IN  DWORD grfMode,
  771.             IN  DWORD stgfmt,              // enum
  772.             IN  DWORD grfAttrs,             // reserved
  773.             IN  STGOPTIONS * pStgOptions,
  774.             IN  void * reserved,
  775.             IN  REFIID riid,
  776.             OUT void ** ppObjectOpen);
  777.  
  778. WINOLEAPI StgOpenStorageEx (IN const WCHAR* pwcsName,
  779.             IN  DWORD grfMode,
  780.             IN  DWORD stgfmt,              // enum
  781.             IN  DWORD grfAttrs,             // reserved
  782.             IN  STGOPTIONS * pStgOptions,
  783.             IN  void * reserved,
  784.             IN  REFIID riid,
  785.             OUT void ** ppObjectOpen);
  786.  
  787.  
  788. //
  789. //  Moniker APIs
  790. //
  791.  
  792. WINOLEAPI  BindMoniker(IN LPMONIKER pmk, IN DWORD grfOpt, IN REFIID iidResult, OUT LPVOID FAR* ppvResult);
  793.  
  794. WINOLEAPI  CoInstall(
  795.     IN  IBindCtx     * pbc,
  796.     IN  DWORD          dwFlags,
  797.     IN  uCLSSPEC     * pClassSpec,
  798.     IN  QUERYCONTEXT * pQuery,
  799.     IN  LPWSTR         pszCodeBase);
  800.  
  801. WINOLEAPI  CoGetObject(IN LPCWSTR pszName, IN BIND_OPTS *pBindOptions, IN REFIID riid, OUT void **ppv);
  802. WINOLEAPI  MkParseDisplayName(IN LPBC pbc, IN LPCOLESTR szUserName,
  803.                 OUT ULONG FAR * pchEaten, OUT LPMONIKER FAR * ppmk);
  804. WINOLEAPI  MonikerRelativePathTo(IN LPMONIKER pmkSrc, IN LPMONIKER pmkDest, OUT LPMONIKER
  805.                 FAR* ppmkRelPath, IN BOOL dwReserved);
  806. WINOLEAPI  MonikerCommonPrefixWith(IN LPMONIKER pmkThis, IN LPMONIKER pmkOther,
  807.                 OUT LPMONIKER FAR* ppmkCommon);
  808. WINOLEAPI  CreateBindCtx(IN DWORD reserved, OUT LPBC FAR* ppbc);
  809. WINOLEAPI  CreateGenericComposite(IN LPMONIKER pmkFirst, IN LPMONIKER pmkRest,
  810.     OUT LPMONIKER FAR* ppmkComposite);
  811. WINOLEAPI  GetClassFile (IN LPCOLESTR szFilename, OUT CLSID FAR* pclsid);
  812.  
  813. WINOLEAPI  CreateClassMoniker(IN REFCLSID rclsid, OUT LPMONIKER FAR* ppmk);
  814.  
  815. WINOLEAPI  CreateFileMoniker(IN LPCOLESTR lpszPathName, OUT LPMONIKER FAR* ppmk);
  816.  
  817. WINOLEAPI  CreateItemMoniker(IN LPCOLESTR lpszDelim, IN LPCOLESTR lpszItem,
  818.     OUT LPMONIKER FAR* ppmk);
  819. WINOLEAPI  CreateAntiMoniker(OUT LPMONIKER FAR* ppmk);
  820. WINOLEAPI  CreatePointerMoniker(IN LPUNKNOWN punk, OUT LPMONIKER FAR* ppmk);
  821. WINOLEAPI  CreateObjrefMoniker(IN LPUNKNOWN punk, OUT LPMONIKER FAR * ppmk);
  822.  
  823. WINOLEAPI  GetRunningObjectTable( IN DWORD reserved, OUT LPRUNNINGOBJECTTABLE FAR* pprot);
  824.  
  825. #include <urlmon.h>
  826. #include <propidl.h>
  827.  
  828. //
  829. // Standard Progress Indicator impolementation
  830. //
  831. WINOLEAPI CreateStdProgressIndicator(IN HWND hwndParent,
  832.                                    IN  LPCOLESTR pszTitle,
  833.                                    IN  IBindStatusCallback * pIbscCaller,
  834.                                    OUT IBindStatusCallback ** ppIbsc);
  835.  
  836. #ifndef RC_INVOKED
  837. #include <poppack.h>
  838. #endif // RC_INVOKED
  839.  
  840. #endif     // __OBJBASE_H__
  841. #pragma option pop /*P_O_Pop*/
  842.