Source: classlib/include/variant.h
|
|
|
|
/***************************************************************************
variant.h - tipo universale
-------------------
begin : Sat Sep 28 2002
copyright : (C) 2002 by Nicola De Nisco
email : nicola@winada.it
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef __VARIANT_H
#define __VARIANT_H
#ifdef __cplusplus
extern "C" {
#endif
struct tagBSTR {
long length;
char data[1];
};
typedef tagBSTR* BSTR;
char* BstrToString(BSTR bstr);
BSTR StringToBstr(const char* s);
BSTR Bstrdup(BSTR bstr);
int readBstr(int handle, BSTR* ptBstr);
int writeBstr(int handle, BSTR str);
int recvBstr(int handle, BSTR* ptBstr, int flags);
int sendBstr(int handle, BSTR str, int flags);
typedef double DATE;
typedef struct tagCY {
unsigned long Lo;
long Hi;
} CY;
typedef LONG SCODE;
typedef short VARIANT_BOOL;
#define VARIANT_TRUE ((VARIANT_BOOL)0xffff)
#define VARIANT_FALSE ((VARIANT_BOOL)0)
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_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
};
const USHORT VT_BYREF = 0x4000;
typedef unsigned short VARTYPE;
typedef struct tagVARIANT VARIANT;
typedef void* IUnknown;
typedef void* IDispatch;
typedef void* SAFEARRAY;
struct tagVARIANT
{
VARTYPE vt;
WORD wReserved1;
WORD wReserved2;
WORD wReserved3;
union
{
long lVal; /* VT_I4 */
unsigned char bVal; /* VT_UI1 */
short iVal; /* VT_I2 */
float fltVal; /* VT_R4 */
double dblVal; /* VT_R8 */
VARIANT_BOOL vbool; /* VT_BOOL */
SCODE scode; /* VT_ERROR */
CY cyVal; /* VT_CY */
DATE date; /* VT_DATE */
BSTR bstrVal; /* VT_BSTR */
IUnknown *punkVal; /* VT_UNKNOWN */
IDispatch *pdispVal; /* VT_DISPATCH */
SAFEARRAY *parray; /* VT_ARRAY|* */
unsigned char *pbVal; /* VT_BYREF|VT_UI1 */
short *piVal; /* VT_BYREF|VT_I2 */
long *plVal; /* VT_BYREF|VT_I4 */
float *pfltVal; /* VT_BYREF|VT_R4 */
double *pdblVal; /* VT_BYREF|VT_R8 */
VARIANT_BOOL *pbool; /* VT_BYREF|VT_BOOL */
SCODE *pscode; /* VT_BYREF|VT_ERROR */
CY *pcyVal; /* VT_BYREF|VT_CY */
DATE *pdate; /* VT_BYREF|VT_DATE */
BSTR *pbstrVal; /* VT_BYREF|VT_BSTR */
IUnknown **ppunkVal; /* VT_BYREF|VT_UNKNOWN */
IDispatch **ppdispVal; /* VT_BYREF|VT_DISPATCH */
SAFEARRAY **pparray; /* VT_BYREF|VT_ARRAY|* */
VARIANT *pvarVal; /* VT_BYREF|VT_VARIANT */
void * byref; /* Generic ByRef */
} u;
};
typedef struct tagVARIANT *LPVARIANT;
typedef struct tagVARIANT VARIANTARG;
typedef struct tagVARIANT *LPVARIANTARG;
/*---------------------------------------------------------------------*/
/* VARIANT API */
/*---------------------------------------------------------------------*/
void VariantInit(VARIANT* pvarg);
int VariantClear(VARIANT* pvarg);
int VariantCopy(
VARIANT* pvargDest,
VARIANT* pvargSrc);
int VariantChangeType(
VARIANT* pvargDest,
VARIANT* pvarSrc,
unsigned short wFlags,
VARTYPE vt);
int readVariant(int handle, VARIANT* valore);
int writeVariant(int handle, VARIANT* valore);
int recvVariant(int handle, VARIANT* valore, int flags);
int sendVariant(int handle, VARIANT* valore, int flags);
#define VARIANT_NOVALUEPROP 1
void Int16ToVariant( short valore, VARIANT* dest );
void Int32ToVariant( int valore, VARIANT* dest );
void FloatToVariant( float valore, VARIANT* dest );
void DoubleToVariant( double valore, VARIANT* dest );
void StringToVariant( const char* valore, VARIANT* dest );
void DateToVariant( DATE valore, VARIANT* dest );
void BOOLToVariant( BOOL valore, VARIANT* dest );
short VariantToInt16( VARIANT* valore );
long VariantToInt32( VARIANT* valore );
float VariantToFloat( VARIANT* valore );
double VariantToDouble( VARIANT* valore );
char* VariantToString( VARIANT* valore );
DATE VariantToDate( VARIANT* valore );
BOOL VariantToBOOL( VARIANT* valore );
void SafeStringToVariant( const char* valore, VARIANT* dest, int maxlen );
#define V_UNION(X, Y) ((X)->u.Y)
/* Variant access macros */
#define V_VT(X) ((X)->vt)
#define V_ISBYREF(X) (V_VT(X)&VT_BYREF)
#define V_ISARRAY(X) (V_VT(X)&VT_ARRAY)
#define V_ISVECTOR(X) (V_VT(X)&VT_VECTOR)
#define V_NONE(X) V_I2(X)
#define V_UI1(X) V_UNION(X, bVal)
#define V_UI1REF(X) V_UNION(X, pbVal)
#define V_I2(X) V_UNION(X, iVal)
#define V_I2REF(X) V_UNION(X, piVal)
#define V_I4(X) V_UNION(X, lVal)
#define V_I4REF(X) V_UNION(X, plVal)
#define V_I8(X) V_UNION(X, hVal)
#define V_I8REF(X) V_UNION(X, phVal)
#define V_R4(X) V_UNION(X, fltVal)
#define V_R4REF(X) V_UNION(X, pfltVal)
#define V_R8(X) V_UNION(X, dblVal)
#define V_R8REF(X) V_UNION(X, pdblVal)
#define V_CY(X) V_UNION(X, cyVal)
#define V_CYREF(X) V_UNION(X, pcyVal)
#define V_DATE(X) V_UNION(X, date)
#define V_DATEREF(X) V_UNION(X, pdate)
#define V_BSTR(X) V_UNION(X, bstrVal)
#define V_BSTRREF(X) V_UNION(X, pbstrVal)
#define V_DISPATCH(X) V_UNION(X, pdispVal)
#define V_DISPATCHREF(X) V_UNION(X, ppdispVal)
#define V_ERROR(X) V_UNION(X, scode)
#define V_ERRORREF(X) V_UNION(X, pscode)
#define V_BOOL(X) V_UNION(X, vbool)
#define V_BOOLREF(X) V_UNION(X, pbool)
#define V_UNKNOWN(X) V_UNION(X, punkVal)
#define V_UNKNOWNREF(X) V_UNION(X, ppunkVal)
#define V_VARIANTREF(X) V_UNION(X, pvarVal)
#define V_LPSTR(X) V_UNION(X, pszVal)
#define V_LPSTRREF(X) V_UNION(X, ppszVal)
#define V_LPWSTR(X) V_UNION(X, pwszVal)
#define V_LPWSTRREF(X) V_UNION(X, ppwszVal)
#define V_FILETIME(X) V_UNION(X, filetime)
#define V_FILETIMEREF(X) V_UNION(X, pfiletime)
#define V_BLOB(X) V_UNION(X, blob)
#define V_UUID(X) V_UNION(X, puuid)
#define V_CLSID(X) V_UNION(X, puuid)
#define V_ARRAY(X) V_UNION(X, parray)
#define V_ARRAYREF(X) V_UNION(X, pparray)
#define V_BYREF(X) V_UNION(X, byref)
#ifdef __cplusplus
}
#endif
#ifdef __cplusplus
// solo per C++ -----------------------------
#include
class Socket;
int send(Socket& sock, VARIANT& valore, int flags = MSG_NOSIGNAL);
int recv(Socket& sock, VARIANT& valore, int flags = MSG_NOSIGNAL | MSG_WAITALL);
int send(Socket& sock, BSTR stringa, int flags = MSG_NOSIGNAL);
int recv(Socket& sock, BSTR& valore, int flags = MSG_NOSIGNAL | MSG_WAITALL);
#endif
#endif // __VARIANT_H
Generated by: nicola on gulliver.wadahome.it on Sun May 25 13:54:34 2003, using kdoc 2.0a53. |