FirteX-高性能全文索引和检索平台API Documentation |
00001 #ifndef _COM_H_ 00002 #define _COM_H_ 00003 00004 #include "../utility/stdint.h" 00005 00006 //#include <stddef.h> 00007 #include <memory.h> 00008 00009 00010 00011 #ifdef __cplusplus 00012 #define EXTERN_C extern "C" 00013 #else 00014 #define EXTERN_C extern 00015 #endif 00016 00017 #if defined(WIN32) 00018 00019 #define FX_STDMETHODCALLTYPE __stdcall 00020 #define FX_STDMETHODVCALLTYPE __cdecl 00021 #define FX_STDAPICALLTYPE __stdcall 00022 #define FX_STDAPIVCALLTYPE __cdecl 00023 #define FX_WINOLEAPI FX_STDAPI //EXTERN_C DECLSPEC_IMPORT FX_HRESULT FX_STDAPICALLTYPE 00024 #define FX_WINOLEAPI_(type) FX_STDAPI_(type) //EXTERN_C DECLSPEC_IMPORT type FX_STDAPICALLTYPE 00025 #define FX_WINOLEAUTAPI FX_STDAPI //EXTERN_C DECLSPEC_IMPORT FX_HRESULT FX_STDAPICALLTYPE 00026 #define FX_WINOLEAUTAPI_(type) FX_STDAPI_(type) //EXTERN_C DECLSPEC_IMPORT type FX_STDAPICALLTYPE 00027 #define __RPC_FAR 00028 00029 00030 #else //for linux 00031 00032 #define FX_STDMETHODCALLTYPE 00033 #define FX_STDMETHODVCALLTYPE 00034 #define FX_STDAPICALLTYPE 00035 #define FX_STDAPIVCALLTYPE 00036 #define FX_WINOLEAPI FX_STDAPI //EXTERN_C DECLSPEC_IMPORT FX_HRESULT FX_STDAPICALLTYPE 00037 #define FX_WINOLEAPI_(type) FX_STDAPI_(type) //EXTERN_C DECLSPEC_IMPORT type FX_STDAPICALLTYPE 00038 #define FX_WINOLEAUTAPI FX_STDAPI 00039 #define FX_WINOLEAUTAPI_(type) FX_STDAPI_(type) 00040 #define __RPC_FAR 00041 00042 #endif 00043 00044 #ifdef __cplusplus 00045 00046 #define FX_STDMETHOD(method) virtual firtex::com::FX_HRESULT FX_STDMETHODCALLTYPE method 00047 #define FX_STDMETHOD_(type,method) virtual type FX_STDMETHODCALLTYPE method 00048 #define FX_STDMETHODIMP firtex::com::FX_HRESULT FX_STDMETHODCALLTYPE 00049 #define FX_STDMETHODIMP_(type) type FX_STDMETHODCALLTYPE 00050 #define FX_STDAPI EXTERN_C firtex::com::FX_HRESULT FX_STDAPICALLTYPE 00051 #define FX_STDAPI_(type) EXTERN_C type FX_STDAPICALLTYPE 00052 #define FX_STDAPIV EXTERN_C firtex::com::FX_HRESULT FX_STDAPIVCALLTYPE 00053 #define FX_STDAPIV_(type) EXTERN_C type FX_STDAPIVCALLTYPE 00054 00055 #else 00056 //#define FX_STDMETHOD(method) virtual FX_HRESULT FX_STDMETHODCALLTYPE method 00057 //#define FX_STDMETHOD_(type,method) virtual type FX_STDMETHODCALLTYPE method 00058 00059 #define FX_STDMETHODIMP FX_HRESULT FX_STDMETHODCALLTYPE 00060 #define FX_STDMETHODIMP_(type) type FX_STDMETHODCALLTYPE 00061 #define FX_STDAPI EXTERN_C FX_HRESULT FX_STDAPICALLTYPE 00062 #define FX_STDAPI_(type) EXTERN_C type FX_STDAPICALLTYPE 00063 #define FX_STDAPIV EXTERN_C FX_HRESULT FX_STDAPIVCALLTYPE 00064 #define FX_STDAPIV_(type) EXTERN_C type FX_STDAPIVCALLTYPE 00065 #define FX_BEGIN_INTERFACE 00066 #define FX_END_INTERFACE 00067 00068 #endif 00069 00070 #ifdef __cplusplus 00071 namespace firtex 00072 { 00073 namespace com 00074 { 00075 #endif 00076 00077 00079 // Typedefs 00081 00082 typedef int32_t FX_HRESULT; 00083 typedef int16_t bool_t; 00084 typedef wchar_t const* BSTR; 00085 enum THREADINGMODEL 00086 { 00087 ThreadingModelApartment = 1, 00088 ThreadingModelFree = 2, 00089 ThreadingModelBoth = 3, 00090 ThreadingModelNeutral = 4 00091 }; 00092 00093 00095 // FX_GUID, FX_IID, FX_CLSID 00097 //#ifndef GUID_DEFINED 00098 00099 struct FX_GUID 00100 { 00101 uint32_t Data1; 00102 uint16_t Data2; 00103 uint16_t Data3; 00104 uint8_t Data4[8]; 00105 }; 00106 //#endif //GUID_DEFINED 00107 00108 #ifdef __cplusplus 00109 typedef FX_GUID const& FX_REFGUID; 00110 typedef FX_GUID FX_IID; 00111 typedef FX_IID const& FX_REFIID; 00112 typedef FX_GUID FX_CLSID; 00113 typedef FX_CLSID const& FX_REFCLSID; 00114 00115 inline bool FX_IsEqualGUID(FX_REFGUID rguid1, FX_REFGUID rguid2) 00116 { 00117 return !memcmp(&rguid1, &rguid2, sizeof(FX_GUID)); 00118 } 00119 inline bool FX_IsEqualIID(FX_REFIID rguid1, FX_REFIID rguid2) 00120 { 00121 return !memcmp(&rguid1, &rguid2, sizeof(FX_GUID)); 00122 } 00123 inline bool FX_IsEqualCLSID(FX_REFCLSID rguid1, FX_REFCLSID rguid2) 00124 { 00125 return !memcmp(&rguid1, &rguid2, sizeof(FX_GUID)); 00126 } 00127 #else 00128 typedef struct FX_GUID const * FX_REFGUID; 00129 typedef struct FX_GUID FX_IID; 00130 typedef FX_IID const* FX_REFIID; 00131 typedef struct FX_GUID FX_CLSID; 00132 typedef FX_CLSID const* FX_REFCLSID; 00133 #endif 00134 00136 // Interface Forward Declares 00138 00139 #ifdef __cplusplus 00140 #define FORWARD_DECLARE(x) \ 00141 class x; 00142 #else 00143 #define FORWARD_DECLARE(x) \ 00144 struct x; \ 00145 typedef struct x x; 00146 #endif 00147 00148 FORWARD_DECLARE( IUnknown ); 00149 00150 FORWARD_DECLARE( ICreateErrorInfo ); 00151 FORWARD_DECLARE( IClassFactory ); 00152 FORWARD_DECLARE( IErrorInfo ); 00153 FORWARD_DECLARE( IGlobalInterfaceTable ); 00154 FORWARD_DECLARE( IMalloc ); 00155 FORWARD_DECLARE( IMallocSpy ); 00156 FORWARD_DECLARE( IMarshal ); 00157 FORWARD_DECLARE( ISequentialStream ); 00158 FORWARD_DECLARE( IStream ); 00159 FORWARD_DECLARE( ISupportErrorInfo ); 00160 00161 #undef FORWARD_DECLARE 00162 00164 // Enums 00166 00167 // COM initialization flags; passed to FX_CoInitialize. 00168 enum coinit_t 00169 { 00170 COINIT_APARTMENTTHREADED = 0x2, // Apartment model 00171 COINIT_MULTITHREADED = 0x0, // OLE calls objects on any thread. 00172 COINIT_DISABLE_OLE1DDE = 0x4, // Don't use DDE for Ole1 support. 00173 COINIT_SPEED_OVER_MEMORY = 0x8 // Trade memory for speed. 00174 }; 00175 00177 // API Structures 00179 00180 struct COAUTHIDENTITY 00181 { 00182 uint16_t* User; 00183 uint32_t UserLength; 00184 uint16_t* Domain; 00185 uint32_t DomainLength; 00186 uint16_t* Password; 00187 uint32_t PasswordLength; 00188 uint32_t Flags; 00189 }; 00190 struct COAUTHINFO 00191 { 00192 uint32_t dwAuthnSvc; 00193 uint32_t dwAuthzSvc; 00194 wchar_t* pwszServerPrincName; 00195 uint32_t dwAuthnLevel; 00196 uint32_t dwImpersonationLevel; 00197 struct COAUTHIDENTITY * pAuthIdentityData; 00198 uint32_t dwCapabilities; 00199 }; 00200 struct COSERVERINFO 00201 { 00202 uint32_t dwReserved1; 00203 wchar_t* pwszName; 00204 struct COAUTHINFO* pAuthInfo; 00205 uint32_t dwReserved2; 00206 }; 00207 struct MULTI_QI 00208 { 00209 FX_IID const * pIID; 00210 IUnknown * pItf; 00211 FX_HRESULT hr; 00212 }; 00213 00215 // API Calls 00217 00218 enum FX_CLSCTX 00219 { 00220 FX_CLSCTX_INPROC_SERVER = 0x1, 00221 FX_CLSCTX_INPROC_HANDLER = 0x2, 00222 FX_CLSCTX_LOCAL_SERVER = 0x4, 00223 FX_CLSCTX_INPROC_SERVER16 = 0x8, 00224 FX_CLSCTX_REMOTE_SERVER = 0x10, 00225 FX_CLSCTX_INPROC_HANDLER16 = 0x20, 00226 FX_CLSCTX_INPROC_SERVERX86 = 0x40, 00227 FX_CLSCTX_INPROC_HANDLERX86 = 0x80, 00228 FX_CLSCTX_ESERVER_HANDLER = 0x100, 00229 FX_CLSCTX_INPROC = FX_CLSCTX_INPROC_SERVER | FX_CLSCTX_INPROC_HANDLER, 00230 }; 00231 enum MSHLFLAGS 00232 { 00233 MSHLFLAGS_NORMAL = 0, 00234 MSHLFLAGS_TABLESTRONG = 1, 00235 MSHLFLAGS_TABLEWEAK = 2, 00236 MSHLFLAGS_NOPING = 4 00237 }; 00238 enum MSHCTX 00239 { 00240 MSHCTX_LOCAL = 0, 00241 MSHCTX_NOSHAREDMEM = 1, 00242 MSHCTX_DIFFERENTMACHINE = 2, 00243 MSHCTX_INPROC = 3 00244 }; 00245 00246 00247 FX_WINOLEAPI FX_CLSIDFromString(wchar_t const* idstr, FX_CLSID* id); 00248 FX_WINOLEAPI_(uint32_t) FX_CoBuildVersion( void ); 00249 FX_WINOLEAPI FX_CoCreateGuid(struct FX_GUID* pguid); 00250 FX_WINOLEAPI FX_CoCreateInstance(FX_REFCLSID rclsid, IUnknown * pUnkOuter,uint32_t dwClsContext, FX_REFIID riid, void __RPC_FAR* __RPC_FAR* ppv); 00251 FX_WINOLEAPI FX_CoCreateInstanceEx(FX_REFCLSID rclsid, IUnknown * pUnkOuter,uint32_t dwClsContext, struct COSERVERINFO * pServerInfo,uint32_t cmq, struct MULTI_QI * pResults); 00252 // FX_WINOLEAPI FX_CoCreateStandardMalloc(uint32_t memctx, IMalloc ** ppMalloc); 00253 FX_WINOLEAPI_(void) FX_CoFreeAllLibraries( void ); 00254 FX_WINOLEAPI_(void) FX_CoFreeLibrary(void* hInst ); 00255 FX_WINOLEAPI_(void) FX_CoFreeUnusedLibraries( void ); 00256 FX_WINOLEAPI FX_CoGetClassObject(FX_REFCLSID rclsid,uint32_t dwClsContext, struct COSERVERINFO * pServerInfo,FX_REFIID riid,void** ppv); 00257 FX_WINOLEAPI_(uint32_t) FX_CoGetCurrentProcess(void); 00258 FX_WINOLEAPI FX_CoGetInterfaceAndReleaseStream(IStream * pStm, FX_REFIID riid, void** ppv); 00259 FX_WINOLEAPI FX_CoGetMalloc(uint32_t dwMemContext, IMalloc ** lpMalloc); 00260 FX_WINOLEAPI FX_CoGetMarshalSizeMax(uint32_t* pulSize, FX_REFIID riid, IUnknown * pUnk,uint32_t dwDestContext, void *pvDestContext, uint32_t mshlFlags); 00261 FX_WINOLEAPI FX_CoGetStandardMarshal(FX_REFIID riid,IUnknown * pUnk,uint32_t dwDestContext,void* pvDestContext,uint32_t mshlflags,IMarshal ** ppMarshal); 00262 FX_WINOLEAPI_(void*) FX_CoLoadLibrary(wchar_t const* lpszLibName, uint16_t bAutoFree /* ignored */ ); 00263 FX_WINOLEAPI FX_CoInitialize(void* pvReserved); 00264 FX_WINOLEAPI FX_CoInitializeEx(void* pvReserved, uint32_t dwCoInit ); 00265 FX_WINOLEAPI FX_CoMarshalInterface( IStream * pStm, FX_REFIID riid, IUnknown * pUnk, uint32_t dwDestContext, void * pvDestContext, uint32_t mshlflags ); 00266 FX_WINOLEAPI FX_CoMarshalInterThreadInterfaceInStream( FX_REFIID riid, IUnknown * pUnk, IStream ** ppStm ); 00267 FX_WINOLEAPI FX_CoReleaseMarshalData( IStream * pStm ); 00268 FX_WINOLEAPI FX_CoRegisterMallocSpy(IMallocSpy * pMallocSpy); 00269 FX_WINOLEAPI FX_CoRevokeMallocSpy(void); 00270 FX_WINOLEAPI_(void*) FX_CoTaskMemAlloc(uint32_t size); 00271 FX_WINOLEAPI_(void) FX_CoTaskMemFree(void* ptr); 00272 FX_WINOLEAPI_(void*) FX_CoTaskMemRealloc(void* ptr,uint32_t size); 00273 FX_WINOLEAPI_(void) FX_CoUninitialize(void); 00274 FX_WINOLEAPI FX_CoUnmarshalInterface(IStream * pStm, FX_REFIID riid,void ** ppv ); 00275 00276 FX_WINOLEAPI_(int) FX_StringFromGUID2(FX_REFGUID rguid, wchar_t* lpsz, int cbMax); 00277 00279 // New Cross-platform calls 00280 // *Static link* 00282 FX_WINOLEAPI DllRegisterServerImpl(FX_REFCLSID clsid, wchar_t const* name, enum THREADINGMODEL tm, wchar_t const* VersionIndependentProgId, wchar_t const* ProgId ); 00283 FX_WINOLEAPI DllUnregisterServerImpl(FX_REFCLSID clsid); 00284 FX_WINOLEAPI DllCanUnloadNowImpl(void); 00285 FX_WINOLEAPI DllLockServerImpl( int32_t fLock ); 00286 00288 // Automation Api 00290 00291 FX_WINOLEAUTAPI FX_CreateErrorInfo(ICreateErrorInfo ** pperrinfo); 00292 FX_WINOLEAUTAPI FX_GetErrorInfo(uint32_t dwReserved, IErrorInfo ** pperrinfo); 00293 FX_WINOLEAUTAPI FX_SetErrorInfo(uint32_t dwReserved, IErrorInfo * perrinfo); 00294 00295 FX_WINOLEAUTAPI_(BSTR) FX_SysAllocString(const wchar_t *); 00296 FX_WINOLEAUTAPI_(int16_t) FX_SysReAllocString(BSTR *, const wchar_t *); 00297 FX_WINOLEAUTAPI_(BSTR) FX_SysAllocStringLen(const wchar_t *, uint16_t); 00298 FX_WINOLEAUTAPI_(int16_t) FX_SysReAllocStringLen(BSTR *, const wchar_t *, uint16_t); 00299 FX_WINOLEAUTAPI_(void) FX_SysFreeString(BSTR); 00300 FX_WINOLEAUTAPI_(uint16_t) FX_SysStringLen(BSTR); 00301 FX_WINOLEAUTAPI_(uint16_t) FX_SysStringByteLen(BSTR bstr); 00302 FX_WINOLEAUTAPI_(BSTR) FX_SysAllocStringByteLen(const char* psz, uint16_t len); 00303 00305 // Non-standard BSTR Api 00307 00308 FX_WINOLEAUTAPI_(BSTR) FX_SysAllocStringA( char const* ); 00309 FX_WINOLEAUTAPI_(BSTR) FX_SysAllocStringFromCLSID( FX_REFCLSID clsid ); 00310 00312 // regsrv32 00314 FX_WINOLEAPI FX_RegSrv32A(const char* filename,bool_t bRegister); 00315 FX_WINOLEAPI FX_RegSrv32W(const wchar_t* filename,bool_t bRegister); 00316 00317 00318 #ifdef __cplusplus 00319 }// namespace com 00320 }; // namespace firtex 00321 #endif 00322 00323 #include "ComInterface.h" 00324 00325 #endif // _COM_H_
http://www.firtex.org http://www.sourceforge.net/projects/firtex