com-1.2.2: include/autoPrim.h
/*
To free ourselves from a couple of needless compiler/
header file dependencies, we provide a hand-written
set of definitions for Automation related types
and interfaces.
*/
#ifndef __AUTOPRIM_H__
#define __AUTOPRIM_H__
#include "comPrim.h"
#include "PointerSrc.h"
#if (defined(__CYGWIN32__) || defined(__MINGW32__)) && __W32API_MAJOR_VERSION == 1
typedef LONG DISPID;
#define DISPATCH_METHOD 0x1
#define DISPATCH_PROPERTYGET 0x2
#define DISPATCH_PROPERTYPUT 0x4
#define DISPATCH_PROPERTYPUTREF 0x8
#define DISPID_VALUE (0)
#define DISPID_UNKNOWN (-1)
#define DISPID_PROPERTYPUT (-3)
#define DISPID_NEWENUM (-4)
#define DISPID_EVALUATE (-5)
#define DISPID_CONSTRUCTOR (-6)
#define DISPID_DESTRUCTOR (-7)
typedef LONG SCODE;
enum VARENUM
{ VT_EMPTY = 0,
VT_NULL = 1,
VT_I2 = 2,
VT_I4 = 3,
VT_R4 = 4,
VT_R8 = 5,
VT_CY = 6,
VT_DATE = 7,
VT_BSTR = 8,
VT_DISPATCH = 9,
VT_ERROR = 10,
VT_BOOL = 11,
VT_VARIANT = 12,
VT_UNKNOWN = 13,
VT_DECIMAL = 14,
VT_I1 = 16,
VT_UI1 = 17,
VT_UI2 = 18,
VT_UI4 = 19,
VT_I8 = 20,
VT_UI8 = 21,
VT_INT = 22,
VT_UINT = 23,
VT_VOID = 24,
VT_HRESULT = 25,
VT_PTR = 26,
VT_SAFEARRAY = 27,
VT_CARRAY = 28,
VT_USERDEFINED = 29,
VT_LPSTR = 30,
VT_LPWSTR = 31,
VT_FILETIME = 64,
VT_BLOB = 65,
VT_STREAM = 66,
VT_STORAGE = 67,
VT_STREAMED_OBJECT = 68,
VT_STORED_OBJECT = 69,
VT_BLOB_OBJECT = 70,
VT_CF = 71,
VT_CLSID = 72,
VT_BSTR_BLOB = 0xfff,
VT_VECTOR = 0x1000,
VT_ARRAY = 0x2000,
VT_BYREF = 0x4000,
VT_RESERVED = 0x8000,
VT_ILLEGAL = 0xffff,
VT_ILLEGALMASKED = 0xfff,
VT_TYPEMASK = 0xfff
};
typedef struct ITypeInfo ITypeInfo;
typedef struct tagEXCEPINFO
{
unsigned short wCode;
unsigned short wReserved;
BSTR bstrSource;
BSTR bstrDescription;
BSTR bstrHelpFile;
unsigned long dwHelpContext;
void* pvReserved;
HRESULT (STDCALL *pfnDeferredFillIn) (struct tagEXCEPINFO*);
SCODE scode;
} EXCEPINFO;
typedef unsigned short VARTYPE;
typedef short VARIANT_BOOL;
typedef VARIANT_BOOL _VARIANT_BOOL;
typedef double DATE;
#if 0
typedef unsigned long long ULONGLONG;
#endif
typedef struct tagCY {
unsigned long Lo;
long Hi;
} CY;
typedef struct IDispatch IDispatch;
typedef struct tagDEC {
USHORT wReserved;
BYTE scale;
BYTE sign;
ULONG Hi32;
unsigned long long Lo64;
} DECIMAL;
typedef struct tagSAFEARRAY SAFEARRAY;
typedef struct tagVARIANT VARIANT;
struct tagVARIANT
{
union {
struct __tagVARIANT {
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union {
LONG lVal;
BYTE bVal;
SHORT iVal;
FLOAT fltVal;
double dblVal;
VARIANT_BOOL boolVal;
_VARIANT_BOOL bool;
SCODE scode;
CY cyVal;
DATE date;
BSTR bstrVal;
IUnknown* punkVal;
IDispatch* pdispVal;
SAFEARRAY* parray;
BYTE* pbVal;
SHORT* piVal;
LONG* plVal;
FLOAT* pfltVal;
double* pdblVal;
VARIANT_BOOL* pboolVal;
_VARIANT_BOOL* pbool;
SCODE* pscode;
CY* pcyVal;
DATE* pdate;
BSTR* pbstrVal;
IUnknown** ppunkVal;
IDispatch** ppdispVal;
SAFEARRAY** pparray;
VARIANT* pvarVal;
PVOID byref;
CHAR cVal;
USHORT uiVal;
ULONG ulVal;
INT intVal;
UINT uintVal;
DECIMAL* pdecVal;
CHAR* pcVal;
USHORT* puiVal;
ULONG* pulVal;
INT* pintVal;
UINT* puintVal;
} n3;
} n2;
DECIMAL decVal;
} n1;
};
typedef VARIANT VARIANTARG;
typedef struct tagDISPPARAMS
{
VARIANTARG* rgvarg;
DISPID* rgdispidNamedArgs;
unsigned int cArgs;
unsigned int cNamedArgs;
} DISPPARAMS;
typedef struct IDispatchVtbl
{
HRESULT ( STDCALL *QueryInterface )
( IDispatch * This
, REFIID riid
, void **ppvObject
);
ULONG ( STDCALL *AddRef )( IDispatch * This );
ULONG ( STDCALL *Release )( IDispatch * This );
HRESULT ( STDCALL *GetTypeInfoCount )
( IDispatch * This
, UINT *pctinfo
);
HRESULT ( STDCALL *GetTypeInfo )
( IDispatch *This
, UINT iTInfo
, LCID lcid
,ITypeInfo **ppTInfo
);
HRESULT ( STDCALL *GetIDsOfNames )
( IDispatch *This
, REFIID riid
, LPOLESTR *rgszNames
, UINT cNames
, LCID lcid
, DISPID *rgDispId
);
HRESULT ( STDCALL *Invoke )
( IDispatch *This
, DISPID dispIdMember
, REFIID riid
, LCID lcid
, WORD wFlags
, DISPPARAMS *pDispParams
, VARIANT *pVarResult
, EXCEPINFO *pExcepInfo
,UINT *puArgErr
);
} IDispatchVtbl;
struct IDispatch { struct IDispatchVtbl *lpVtbl; };
#endif
#if !defined(IDispatch_GetIDsOfNames)
#define IDispatch_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
(This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId)
#endif
#if !defined(IDispatch_Invoke)
#define IDispatch_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
(This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr)
#endif
#if __W32API_MAJOR_VERSION == 1
extern void STDCALL VariantInit(VARIANTARG* pvarg);
extern HRESULT STDCALL VariantClear(VARIANTARG* pvarg);
extern HRESULT STDCALL VariantCopy(VARIANTARG* pvArgDest, VARIANTARG* pvArgSrc);
extern HRESULT STDCALL VariantChangeType( VARIANTARG* pvargDest
, VARIANTARG* pvarSrc
, unsigned short wFlags
, VARTYPE vt
);
#endif
extern int dispErrorUNKNOWNNAME(HRESULT hr);
extern int dispErrorEXCEPTION(HRESULT hr);
extern HRESULT readVarVariant( VARIANT* v, VARIANT* x );
extern int readVariantTag( VARIANT* v );
extern void writeVarVariant( VARIANT* x, VARIANT* v);
extern HRESULT readVarCurrency( VARIANT* v, int* hi, unsigned int* lo );
extern void writeVarCurrency( int hi, unsigned int lo, VARIANT* v );
extern HRESULT readVarWord64( VARIANT* v, unsigned int* hi, unsigned int* lo );
extern void writeVarWord64( unsigned int hi, unsigned int lo, VARIANT* v );
extern HRESULT readVarNull( VARIANT* v );
extern void writeVarNull( VARIANT* v );
extern void writeVarEmpty( VARIANT* v );
extern void writeVarOptional( VARIANT* v );
extern void writeVarSAFEARRAY ( VARIANT* v, SAFEARRAY* sa, VARTYPE vt);
extern HRESULT readVarSAFEARRAY ( VARIANT* v, SAFEARRAY** sa, VARTYPE vt);
#define READWRITEPROTO(htype,ctype) \
extern void writeVar##htype( ctype x, VARIANT* v); \
extern HRESULT readVar##htype( VARIANT* v, ctype* p)
#define READWRITETEMPPROTO(htype,ctype) \
extern void writeVar##htype( ctype x, VARIANT* v); \
extern HRESULT readVar##htype( VARIANT* v, ctype* p, VARIANT** w)
READWRITEPROTO(Short,int);
READWRITEPROTO(Int,int);
READWRITEPROTO(Word,unsigned int);
READWRITEPROTO(Float,float);
READWRITEPROTO(Double, double);
READWRITEPROTO(Date, double);
READWRITETEMPPROTO(String, BSTR);
READWRITETEMPPROTO(Dispatch, IDispatch*);
READWRITEPROTO(Bool, BOOL);
READWRITETEMPPROTO(Unknown, IUnknown*);
READWRITEPROTO(Byte, unsigned char);
READWRITEPROTO(Error, int);
extern void freeVariants( int count, VARIANT* p );
extern HRESULT
dispatchGetMemberID( IDispatch* obj, BSTR name, LCID lcid, DISPID* dispid );
extern char* getExcepInfoMessage( EXCEPINFO* info );
extern void freeExcepInfo( EXCEPINFO* info );
extern HRESULT
dispatchInvoke( IDispatch* obj, DISPID dispid, LCID lcid,
BOOL isfunction, unsigned flags,
int cargs, int cargsout,
VARIANT* args, VARIANT* argsout,
EXCEPINFO** info );
extern
HRESULT
STDCALL
SafeArrayDestroy
( /*[in]*/SAFEARRAY* psa
);
extern HRESULT primCopyVARIANT ( VARIANT* p1, VARIANT* p2 );
extern HRESULT primVARIANTClear ( VARIANT* p1 );
extern HRESULT primClockToDate (/*[in]*/int ct, /*[out]*/double* pT);
#endif /* __AUTOPRIM_H__ */