DumontEXE 0.0.1
varianthelper.cpp
00001 #include "VariantHelper.h"
00002 #include "win32_Unicode.h"
00003 
00004 std::string TypeAsString(VARTYPE vt){
00005   switch (vt) {
00006     case    VT_EMPTY:
00007     return "VT_EMPTY";
00008 
00009     case    VT_NULL:
00010     return "VT_NULL";
00011 
00012     case    VT_I2:
00013     return "VT_I2";
00014 
00015     case    VT_I4:
00016     return "VT_I4";
00017 
00018     case    VT_R4:
00019     return "VT_R4";
00020 
00021     case    VT_R8:
00022     return "VT_R8";
00023 
00024     case    VT_CY:
00025     return "VT_CY";
00026 
00027     case    VT_DATE:
00028     return "VT_DATE";
00029 
00030     case    VT_BSTR:
00031     return "VT_BSTR";
00032 
00033     case    VT_DISPATCH:
00034     return "VT_DISPATCH";
00035 
00036     case    VT_ERROR:
00037     return "VT_ERROR";
00038 
00039     case    VT_BOOL:
00040     return "VT_BOOL";
00041 
00042     case    VT_VARIANT:
00043     return "VT_VARIANT";
00044 
00045     case    VT_DECIMAL:
00046     return "VT_DECIMAL";
00047 
00048     case    VT_RECORD:
00049     return "VT_RECORD";
00050 
00051     case    VT_UNKNOWN:
00052     return "VT_UNKNOWN";
00053 
00054     case    VT_I1:
00055     return "VT_I1";
00056 
00057     case    VT_UI1:
00058     return "VT_UI1";
00059 
00060     case    VT_UI2:
00061     return "VT_UI2";
00062 
00063     case    VT_UI4:
00064     return "VT_UI4";
00065 
00066     case    VT_INT:
00067     return "VT_INT";
00068 
00069     case    VT_UINT:
00070     return "VT_UINT";
00071 
00072     case    VT_VOID:
00073     return "VT_VOID";
00074 
00075     case    VT_HRESULT:
00076     return "VT_HRESULT";
00077 
00078     case    VT_PTR:
00079     return "VT_PTR";
00080 
00081     case    VT_SAFEARRAY:
00082     return "VT_SAFEARRAY";
00083 
00084     case    VT_CARRAY:
00085     return "VT_CARRAY";
00086 
00087     case    VT_USERDEFINED:
00088     return "VT_USERDEFINED";
00089 
00090     case    VT_LPSTR:
00091     return "VT_LPSTR";
00092 
00093     case    VT_LPWSTR:
00094     return "VT_LPWSTR";
00095 
00096     case    VT_BLOB:
00097     return "VT_BLOB";
00098 
00099     case    VT_STREAM:
00100     return "VT_STREAM";
00101 
00102     case    VT_STORAGE:
00103     return "VT_STORAGE";
00104 
00105     case    VT_STREAMED_OBJECT:
00106     return "VT_STREAMED_OBJECT";
00107 
00108     case    VT_STORED_OBJECT:
00109     return "VT_STORED_OBJECT";
00110 
00111     case    VT_BLOB_OBJECT:
00112     return "VT_BLOB_OBJECT";
00113 
00114     case    VT_CF:  // Clipboard Format
00115     return "VT_CF";
00116 
00117     case    VT_CLSID:
00118     return "VT_CLSID";
00119 
00120     case    VT_VECTOR:
00121     return "VT_VECTOR";
00122 
00123     case    VT_ARRAY:
00124     return "VT_ARRAY";
00125 
00126     //case    VT_BYREF:
00127     //return "VT_BYREF";
00128 
00129     case    VT_BYREF|VT_DECIMAL:
00130     return "VT_BYREF|VT_DECIMAL";
00131 
00132 
00133     //case    VT_ARRAY|*:
00134     //return "VT_ARRAY|*";
00135 
00136     case    VT_BYREF|VT_UI1:
00137     return "VT_BYREF|VT_UI1";
00138 
00139     case    VT_BYREF|VT_I2:
00140     return "VT_BYREF|VT_I2";
00141 
00142     case    VT_BYREF|VT_I4:
00143     return "VT_BYREF|VT_I4";
00144 
00145     case    VT_BYREF|VT_R4:
00146     return "VT_BYREF|VT_R4";
00147 
00148     case    VT_BYREF|VT_R8:
00149     return "VT_BYREF|VT_R8";
00150 
00151     case    VT_BYREF|VT_BOOL:
00152     return "VT_BYREF|VT_BOOL";
00153 
00154     case    VT_BYREF|VT_ERROR:
00155     return "VT_BYREF|VT_ERROR";
00156 
00157     case    VT_BYREF|VT_CY:
00158     return "VT_BYREF|VT_CY";
00159 
00160     case    VT_BYREF|VT_DATE:
00161     return "VT_BYREF|VT_DATE";
00162 
00163     case    VT_BYREF|VT_BSTR:
00164     return "VT_BYREF|VT_BSTR";
00165 
00166     case    VT_BYREF|VT_UNKNOWN:
00167     return "VT_BYREF|VT_UNKNOWN";
00168 
00169     case    VT_BYREF|VT_DISPATCH:
00170     return "VT_BYREF|VT_DISPATCH";
00171 
00172     //case    VT_ARRAY|*:
00173     //return "VT_ARRAY|*";
00174 
00175     case    VT_BYREF|VT_VARIANT:
00176     return "VT_BYREF|VT_VARIANT";
00177 
00178        //Generic case ByRef:
00179     //return "ByRef";
00180 
00181 
00182     case    VT_BYREF|VT_I1:
00183     return "VT_BYREF|VT_I1";
00184 
00185     case    VT_BYREF|VT_UI2:
00186     return "VT_BYREF|VT_UI2";
00187 
00188     case    VT_BYREF|VT_UI4:
00189     return "VT_BYREF|VT_UI4";
00190 
00191     case    VT_BYREF|VT_INT:
00192     return "VT_BYREF|VT_INT";
00193 
00194     case    VT_BYREF|VT_UINT:
00195     return "VT_BYREF|VT_UINT";
00196 
00197     default:
00198     return "Unknown type";
00199   }
00200 }
00201 
00202 std::string VariantTypeAsString(const VARIANT& v) {
00203   return TypeAsString(v.vt);
00204 }
00205 
00206 variant::variant(VARIANT v) : v_(v) {
00207 }
00208 
00209 variant::~variant() {
00210   ::VariantClear(&v_);
00211 }
00212 
00213 std::string variant::ValueAsString() {
00214   if (v_.vt != VT_BSTR) {
00215     variant v = *this;
00216 
00217     v.ChangeType(VT_BSTR);
00218     return v.ValueAsString();
00219   }
00220 
00221   return ws2s(v_.bstrVal);
00222 }
00223 
00224 void variant::ChangeType(VARTYPE vt) {
00225   ::VariantChangeType(&v_, &v_, VARIANT_ALPHABOOL, vt);
00226 }
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties




~ ~ ~ ~ ~ ~
Source Code without Comments is like a Cranberry Garland
without the berries. Comment your Code!
 
Commence Database User Support Group Forum
http://newsgroup.showoff-db.org/
~ ~ ~ ~ ~ ~
Author: Mark Petryk
Lorimark Solutions, LLC
mark@lorimarksolutions.com