📄 comlib.h
字号:
/* comLib.h - VxWorks COM public API *//* Copyright (c) 1998 Wind River Systems, Inc. *//*modification history--------------------02u,02jan02,nel Fix alloca for diab build.02t,10dec01,dbs diab build02s,08aug01,nel Removed V_DECIMAL macros, not supported.02r,16jul01,dbs correct definition of comLibInit func02q,13jul01,dbs change vxcom back to vxidl02p,28jun01,dbs move VxMutex to private header02o,27jun01,nel Add extra SafeArray API.02n,21jun01,dbs move some definitions to comCoreLib02m,20jun01,nel Remove WindTypes and replace with vxcom.h.02l,08feb01,nel SPR#63885. SAFEARRAYs added. 02k,30may00,nel Add more variant support02j,02feb00,dbs add some Variant-related APIs02i,22sep99,dbs fix VARIANT type (moved to vxidl.idl)02h,20sep99,dbs move main typedefs into vxidl.idl/.h02g,16sep99,dbs add uchar typedef02f,01sep99,dbs add more IDL types02e,18aug99,aim fix GUID structure for SIMNT02d,05aug99,dbs add byte typedef02c,30jul99,aim changed mutex types to void*02b,30jul99,dbs fix build issues on SIMNT02a,29jul99,dbs add SIMNT support01z,28jul99,drm Changing g_defaultServerPriority to g_defaultServerPriority.01y,27jul99,drm Removing PS_CLNT_ASSIGNED enum entry.01x,16jul99,dbs reverse T2OLE expression, remove need for USES_CONVERSION01w,10jun99,dbs move vxdcom-private funcs out of here01v,04jun99,dbs remove public registry APIs01u,03jun99,dbs make mutex lock return void01t,03jun99,dbs fix long long type for W3201s,02jun99,aim #undef Free if it's defined01r,02jun99,dbs use new OS-specific macros01q,20may99,dbs add SysAllocStringByteLen() API01p,07may99,dbs add PROTSEQ typedef01o,03may99,drm adding priority scheme support01n,28apr99,dbs remove COM_NO_WINDOWS_H01m,20apr99,dbs add TLS defs for Win32, remove CoSetMalloc() API01l,14apr99,dbs fix alloca() definition for Win3201k,14apr99,dbs add definition for alloca() in gcc01j,31mar99,dbs added SysAllocStringLen API01i,19mar99,drm added CoCreateGuid() declaration01h,01mar99,dbs add GUID_NULL definition01g,19feb99,dbs add more wide-char support01f,11feb99,dbs add CoSetMalloc API01e,04feb99,dbs fix wide-char type for portability01d,03feb99,dbs use STDMETHOD macros01c,20jan99,dbs fix file names - vxcom becomes com01b,08jan99,dbs add TLS functions01a,18dec98,dbs created (from dcomLib.h)*//* DESCRIPTION: This file defines a working subset of the COM API (as defined by Microsoft) for support of plain COM in VxWorks. A slight difference from the MS implementation is that CoCreateInstance() only works for CLSCTX_INPROC servers, and CoCreateInstanceEx() must be used for CLSCTX_REMOTE servers. Also, CoGetClassObject() is only available when DCOM is included, and not under plain VXCOM. */#ifndef __INCcomLib_h#define __INCcomLib_h#include <string.h>#include "vxidl.h"#include "comCoreLib.h"#include "semLib.h"#ifdef __cplusplusextern "C" {#endif extern int g_defaultServerPriority;/* * The COM initialization type -- only COINIT_MULTITHREADED is * accepted by VxCOM / VxDCOM, the others are provided for Win32 * compatibility.*/typedef enum { COINIT_APARTMENTTHREADED = 0x2, // apartment model - not supported COINIT_MULTITHREADED = 0x0, // call 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;////////////////////////////////////////////////////////////////////////////// Public API Functions - these mimic the Win32 CoXxxx API calls.////////////////////////////////////////////////////////////////////////////STATUS comLibInit (void);HRESULT CoCreateInstance ( REFCLSID rclsid, // CLSID of the object IUnknown* pUnkOuter, // pointer to aggregating object DWORD dwClsContext, // one of CLSCTX values REFIID riid, // IID of desired interface void** ppv // output interface ptr );HRESULT CoInitialize (void*);HRESULT CoInitializeEx (void*, DWORD);void CoUninitialize (void);DWORD CoGetCurrentProcess (void);void* CoTaskMemAlloc (ULONG cb); void* CoTaskMemRealloc (LPVOID pv, ULONG cb); void CoTaskMemFree (LPVOID pv); HRESULT CoGetMalloc ( DWORD dwMemContext, // private or shared IMalloc** ppMalloc // output ptr );HRESULT CoCreateGuid (GUID *pguid);BSTR SysAllocString (const OLECHAR*);BSTR SysAllocStringLen (const OLECHAR*, unsigned long);BSTR SysAllocStringByteLen (const char*, unsigned long);HRESULT SysFreeString (BSTR);DWORD SysStringLen (BSTR);DWORD SysStringByteLen (BSTR);int StringFromGUID2 ( REFGUID rguid, // IID to be converted LPOLESTR lpsz, // resulting string int cbMax // max size of returned string );HRESULT StringFromCLSID ( REFCLSID rclsid, // CLSID to be converted LPOLESTR* ppsz // output var to receive string );HRESULT StringFromIID ( REFIID riid, // IID to be converted LPOLESTR* ppsz // output var to receive string );HRESULT CLSIDFromString ( LPCOLESTR lpsz, // string representation of CLSID LPCLSID pclsid // pointer to CLSID );HRESULT IIDFromString ( LPCOLESTR lpsz, // string representation of IID LPIID piid // pointer to IID );BOOL IsEqualGUID ( REFGUID guid1, REFGUID guid2 );BOOL IsEqualCLSID ( REFCLSID clsid1, REFCLSID clsid2 );BOOL IsEqualIID ( REFIID iid1, REFIID iid2 );HRESULT WriteClassStm ( IStream * pStm, // IStream to store in REFCLSID rclsid // CLSID to be stored in stream );HRESULT ReadClassStm ( IStream * pStm, // stream holding the CLSID CLSID * pclsid // output CLSID );#ifndef V_VT/* Variant access macros */#define V_VT(X) ((X)->vt)#define V_ISARRAY(X) (V_VT(X)&VT_ARRAY)#define V_UI1(X) ((X)->bVal)#define V_I2(X) ((X)->iVal)#define V_I4(X) ((X)->lVal)#define V_R4(X) ((X)->fltVal)#define V_R8(X) ((X)->dblVal)#define V_CY(X) ((X)->cyVal)#define V_DATE(X) ((X)->date)#define V_BSTR(X) ((X)->bstrVal)#define V_ERROR(X) ((X)->scode)#define V_BOOL(X) ((X)->boolVal)#define V_UNKNOWN(X) ((X)->punkVal)#define V_ARRAY(X) ((X)->parray)#define V_VARIANT(X) ((X)->pvarVal)#endif /* V_VT */void VariantInit (VARIANT* v);HRESULT VariantClear (VARIANT* v);HRESULT VariantCopy (VARIANT* d, VARIANT* s);HRESULT VariantChangeType (VARIANT * d, VARIANT * s, USHORT wFlags, VARTYPE vt);SAFEARRAY * SafeArrayCreate ( VARTYPE vt, UINT cDims, SAFEARRAYBOUND * rgsabound );HRESULT SafeArrayDestroy ( SAFEARRAY * psa );HRESULT SafeArrayLock (SAFEARRAY * psa);HRESULT SafeArrayUnlock (SAFEARRAY * psa);HRESULT SafeArrayPutElement ( SAFEARRAY * psa, long * rgIndicies, void * pv );HRESULT SafeArrayGetElement ( SAFEARRAY * psa, long * rgIndicies, void * pv );HRESULT SafeArrayAccessData ( SAFEARRAY * psa, void ** ppvData );HRESULT SafeArrayUnaccessData ( SAFEARRAY * psa );HRESULT SafeArrayCopy ( SAFEARRAY * psa, SAFEARRAY ** ppsaOut );HRESULT SafeArrayGetLBound ( SAFEARRAY * psa, unsigned int nDim, long * plLbound );HRESULT SafeArrayGetUBound ( SAFEARRAY * psa, unsigned int nDim, long * plUbound ); UINT SafeArrayGetDim ( SAFEARRAY * psa ); UINT SafeArrayGetElemsize ( SAFEARRAY * psa );HRESULT SafeArrayGetVartype ( SAFEARRAY * psa, VARTYPE * pvt );const char* vxcomGUID2String (REFGUID guid);HRESULT comStreamCreate ( const void* pMem, // raw memory block unsigned long len, // length IStream** ppStream // output stream-ptr );int comWideToAscii ( char* result, // resulting ascii string const OLECHAR* wstr, // input wide-string int maxLen // max length to convert );int comAsciiToWide ( OLECHAR* result, // resulting wide string const char* str, // input string int maxLen // max length to convert );size_t comWideStrLen ( const OLECHAR* wsz // wide string );OLECHAR* comWideStrCopy ( OLECHAR* wszDst, // destination const OLECHAR* wszSrc // source );HRESULT vxdcomClassRegister ( REFCLSID clsid, // key PFN_GETCLASSOBJECT pFnGCO, // ptr to GetClassObject() fn VXDCOMPRIORITYSCHEME priorityScheme, // priority scheme int priority // priority assoc. with scheme );////////////////////////////////////////////////////////////////////////////// Inline ASCII/WIDE conversion macros a la ATL. Unlike ATL, a// function need not declare USES_CONVERSION at the top, but can// freely use the macros to do inline conversion of wide-to-ascii// (e.g. OLE2T(pwszSomeWideString)) or ascii-to-wide (e.g. T2OLE("some// ASCII text")) on any architecture. Currently, OLECHAR != wchar_t on// all VxWorks architectures, so use of Wide Literal Strings// (e.g. L"some wide text") is not recommended.//#ifdef __GNUC__# ifndef alloca# define alloca __builtin_alloca# endif#elif defined(__DCC__)/* its a builtin for DCC */#else#include <malloc.h>#endif#ifndef USES_CONVERSION#define USES_CONVERSION#endifOLECHAR* comT2OLEHelper (void*,const char*);char* comOLE2THelper (void*,const OLECHAR*);#define T2OLE(psz) \ ((psz) ? (comT2OLEHelper (alloca (sizeof (OLECHAR) * (strlen (psz) + 1)), \ psz)) : 0)#define OLE2T(pwsz) \ ((pwsz) ? (comOLE2THelper(alloca (comWideStrLen (pwsz) + 1), pwsz)) : 0)#ifdef __cplusplus}#endif #endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -