FirteX-高性能全文索引和检索平台

API Documentation


首页 | 名字空间列表 | 类继承关系 | 组合类型列表 | $(BL\录(B | 文件列表 | 名字空间成员 | 组合类型成员 | 文件成员

Com.h

浏览该文件的文档。
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