/* * Copyright (C) 1998 François Gouget * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "rpc.h" #include "rpcndr.h" #ifndef _OBJBASE_H_ #define _OBJBASE_H_ #define __WINE_INCLUDE_OBJIDL #include "objidl.h" #undef __WINE_INCLUDE_OBJIDL #ifndef RC_INVOKED /* For compatibility only, at least for now */ #include #endif #ifndef INITGUID #include "cguid.h" #endif #ifdef __cplusplus extern "C" { #endif #ifndef NONAMELESSSTRUCT #define LISet32(li, v) ((li).HighPart = (v) < 0 ? -1 : 0, (li).LowPart = (v)) #define ULISet32(li, v) ((li).HighPart = 0, (li).LowPart = (v)) #else #define LISet32(li, v) ((li).s.HighPart = (v) < 0 ? -1 : 0, (li).s.LowPart = (v)) #define ULISet32(li, v) ((li).s.HighPart = 0, (li).s.LowPart = (v)) #endif /***************************************************************************** * Standard API */ HRESULT WINAPI CoCreateGuid(GUID* pguid); HINSTANCE WINAPI CoLoadLibrary(LPOLESTR lpszLibName, BOOL bAutoFree); void WINAPI CoFreeAllLibraries(void); void WINAPI CoFreeLibrary(HINSTANCE hLibrary); void WINAPI CoFreeUnusedLibraries(void); HRESULT WINAPI CoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID iid, LPVOID *ppv); HRESULT WINAPI CoGetClassObject(REFCLSID rclsid, DWORD dwClsContext, COSERVERINFO *pServerInfo, REFIID iid, LPVOID *ppv); HRESULT WINAPI CoInitialize(LPVOID lpReserved); HRESULT WINAPI CoInitializeEx(LPVOID lpReserved, DWORD dwCoInit); void WINAPI CoUninitialize(void); typedef enum tagCOINIT { COINIT_APARTMENTTHREADED = 0x2, /* Apartment model */ COINIT_MULTITHREADED = 0x0, /* OLE calls objects on any thread */ COINIT_DISABLE_OLE1DDE = 0x4, /* Don't use DDE for Ole1 support */ COINIT_SPEED_OVER_MEMORY = 0x8 /* Trade memory for speed */ } COINIT; /* FIXME: not implemented */ BOOL WINAPI CoIsOle1Class(REFCLSID rclsid); HRESULT WINAPI CoLockObjectExternal(LPUNKNOWN pUnk, BOOL fLock, BOOL fLastUnlockReleases); /* class registration flags; passed to CoRegisterClassObject */ typedef enum tagREGCLS { REGCLS_SINGLEUSE = 0, REGCLS_MULTIPLEUSE = 1, REGCLS_MULTI_SEPARATE = 2, REGCLS_SUSPENDED = 4 } REGCLS; HRESULT WINAPI CoRegisterClassObject(REFCLSID rclsid,LPUNKNOWN pUnk,DWORD dwClsContext,DWORD flags,LPDWORD lpdwRegister); HRESULT WINAPI CoRevokeClassObject(DWORD dwRegister); HRESULT WINAPI CoGetPSClsid(REFIID riid,CLSID *pclsid); /***************************************************************************** * GUID API */ HRESULT WINAPI StringFromCLSID16(REFCLSID id, LPOLESTR16*); HRESULT WINAPI StringFromCLSID(REFCLSID id, LPOLESTR*); HRESULT WINAPI CLSIDFromString16(LPCOLESTR16, CLSID *); HRESULT WINAPI CLSIDFromString(LPCOLESTR, CLSID *); HRESULT WINAPI CLSIDFromProgID16(LPCOLESTR16 progid, LPCLSID riid); HRESULT WINAPI CLSIDFromProgID(LPCOLESTR progid, LPCLSID riid); HRESULT WINAPI ProgIDFromCLSID(REFCLSID clsid, LPOLESTR *lplpszProgID); INT WINAPI StringFromGUID2(REFGUID id, LPOLESTR str, INT cmax); /***************************************************************************** * COM Server dll - exports */ HRESULT WINAPI DllGetClassObject(REFCLSID rclsid, REFIID riid, LPVOID * ppv); HRESULT WINAPI DllCanUnloadNow(void); /***************************************************************************** * Moniker API */ HRESULT WINAPI GetClassFile(LPCOLESTR filePathName,CLSID *pclsid); #ifdef __cplusplus } #endif #ifndef __WINE__ /* These macros are msdev's way of defining COM objects. * They are provided here for use by Winelib developpers. */ #define FARSTRUCT #define HUGEP #define WINOLEAPI STDAPI #define WINOLEAPI_(type) STDAPI_(type) #if defined(__cplusplus) && !defined(CINTERFACE) #define interface struct #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 #define BEGIN_INTERFACE #define END_INTERFACE #else #define interface struct #define STDMETHOD(method) HRESULT STDMETHODCALLTYPE (*method) #define STDMETHOD_(type,method) type STDMETHODCALLTYPE (*method) #define PURE #define THIS_ INTERFACE FAR* This, #define THIS INTERFACE FAR* This #ifdef CONST_VTABLE #undef CONST_VTBL #define CONST_VTBL const #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 #undef CONST_VTBL #define CONST_VTBL #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) #define BEGIN_INTERFACE #define END_INTERFACE #endif /* __cplusplus && !CINTERFACE */ #endif /* __WINE__ */ #endif /* _OBJBASE_H_ */