oledb_sup.h

00001 /******************************************************************************
00002  * $Id: oledb_sup.h 10646 2007-01-18 02:38:10Z warmerdam $
00003  *
00004  * Project:  OpenGIS Simple Features Reference Implementation
00005  * Purpose:  OLE DB support functions. 
00006  * Author:   Frank Warmerdam, warmerdam@pobox.com
00007  *
00008  ******************************************************************************
00009  * Copyright (c) 1999, Frank Warmerdam
00010  *
00011  * Permission is hereby granted, free of charge, to any person obtaining a
00012  * copy of this software and associated documentation files (the "Software"),
00013  * to deal in the Software without restriction, including without limitation
00014  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00015  * and/or sell copies of the Software, and to permit persons to whom the
00016  * Software is furnished to do so, subject to the following conditions:
00017  *
00018  * The above copyright notice and this permission notice shall be included
00019  * in all copies or substantial portions of the Software.
00020  *
00021  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00022  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00023  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
00024  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00025  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
00026  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
00027  * DEALINGS IN THE SOFTWARE.
00028  ****************************************************************************/
00029 
00030 #ifndef OLEDB_SUP_H_INCLUDED
00031 #define OLEDB_SUP_H_INCLUDED
00032 
00033 #define WIN32_LEAN_AND_MEAN             // avoid the world
00034 #define INC_OLE2                                // tell windows.h to always include ole2.h
00035 
00036 #include <windows.h>                    // 
00037 #include <ole2ver.h>                    // OLE2.0 build version
00038 #include <cguid.h>                              // GUID_NULL
00039 #include <stdio.h>                              // vsnprintf, etc.
00040 #include <stddef.h>                             // offsetof
00041 #include <stdarg.h>                             // va_arg
00042 #include <assert.h>                             // assert
00043 
00044 //      OLE DB headers
00045 #include <oledb.h>
00046 #include <oledberr.h>
00047 
00048 /* -------------------------------------------------------------------- */
00049 /*      General error reporting.                                        */
00050 /* -------------------------------------------------------------------- */
00051 void DumpErrorMsg( const char * );
00052 HRESULT DumpErrorHResult( HRESULT, const char *, ... );
00053 
00054 HRESULT AnsiToUnicode(LPCSTR pszA, LPOLESTR* ppszW);
00055 HRESULT UnicodeToAnsi(LPCOLESTR ppszW, LPSTR *pszA );
00056 HRESULT AnsiToBSTR( const char *, BSTR * );
00057 
00058 extern "C" {
00059 const char *VARIANTToString( VARIANT * );
00060 }
00061 
00062 /* -------------------------------------------------------------------- */
00063 /*      Ole helper functions.                                           */
00064 /* -------------------------------------------------------------------- */
00065 int OleSupInitialize();
00066 int OleSupUninitialize();
00067 
00068 void OledbSupWriteColumnInfo( FILE *, DBCOLUMNINFO * );
00069 void OledbSupDumpRow( FILE *, DBCOLUMNINFO *, int, DBBINDING *,
00070                       ULONG, ULONG, BYTE * );
00071 
00072 /* -------------------------------------------------------------------- */
00073 /*                       Constants from sampclnt.                       */
00074 /* -------------------------------------------------------------------- */
00075 
00076 // Alignment for placement of each column within memory.
00077 // Rule of thumb is "natural" boundary, i.e. 4-byte member should be
00078 // aligned on address that is multiple of 4.
00079 // Worst case is double or __int64 (8 bytes).
00080 #define COLUMN_ALIGNVAL 8
00081 
00082 #define MAX_GUID_STRING     42  // size of a GUID, in characters
00083 #define MAX_NAME_STRING     60  // size of DBCOLOD name or propid string
00084 #define MAX_BINDINGS       100  // size of binding array
00085 #define NUMROWS_CHUNK       20  // number of rows to grab at a time
00086 #define DEFAULT_CBMAXLENGTH 40  // cbMaxLength for binding
00087 
00088 //-----------------------------------
00089 //      macros 
00090 //------------------------------------
00091 
00092 // Rounding amount is always a power of two.
00093 #define ROUND_UP(   Size, Amount ) (((DWORD)(Size) +  ((Amount) - 1)) & ~((Amount) - 1))
00094 
00095 #ifndef  NUMELEM
00096 # define NUMELEM(p) (sizeof(p)/sizeof(*p))
00097 #endif
00098 
00099 //-----------------------------------
00100 //      type and structure definitions 
00101 //------------------------------------
00102 
00103 // How to lay out each column in memory.
00104 // Issue? we depend on the dwLength field being first in memory (see assert)
00105 // is there another way to handle this?
00106 struct COLUMNDATA 
00107         {
00108         DWORD           dwLength;       // length of data (not space allocated)
00109         DWORD           dwStatus;       // status of column
00110         BYTE            bData[1];       // data here and beyond
00111         };
00112 
00113 
00114 // Lists of value/string pairs.
00115 typedef struct {
00116         DWORD dwFlag;
00117         char *szText;
00118 } Note;
00119 
00120 char * GetNoteString( Note *, int, DWORD );
00121 
00122 #define NOTE(s) { (DWORD) s, #s }
00123 
00124 #endif /* ndef OLEDB_SUP_H_INCLUDED */

Generated for GDAL by doxygen 1.5.2.