//头文件
1 #pragma once
class VariantConvert
{
public:
VariantConvert(void);
~VariantConvert(void); public:
void short2Variant(short sData,VARIANT &va);
//VARIANT short2Var(shortsData);
void long2Variant(long lData,VARIANT& va);
void float2Variant(float fData, VARIANT& va);
void double2Variant(double dData,VARIANT &va);
void unChar2Variant(unsigned char chData,VARIANT &va);
void arrayDouble2Variant(double *pArray,int iDim1Num,int iDim2Num,VARIANT &vaArray);
void arrayDouble2Variant(double *pArray,int iDimlength,VARIANT &vaArray);
void arraylong2Variant(long *pArray,int iDim1Num,int iDim2Num,VARIANT& vaArray);
void arraylong2Variant(long *pArray,int iDimlength,VARIANT &vaArray);
//void arrayunChar2Variant(byte *pArray,int iDim1Num,int iDim2Num,VARIANT &vaArray );
void arrayunChar2Variant(byte *pArray,int iDimlength,VARIANT &vaArray);
public:
//void Variant2Data(VARIANT vaData, void&Data);
bool Variant2short(VARIANT vaData, short &sData);
bool Variant2long(VARIANT vaData, long & lData);
bool Variant2float(VARIANT vaData,float& fData);
bool Variant2double(VARIANT vaData,double & dData);
void Variant2Array(VARIANT vaArray,UINT &iDim,long&iDim1Num,long &iDim2Num,LPVOID *pData);
void Variant2Array(VARIANT vaArray,UINT &nDim,long&lDimLenght,VOID** pData);
};

实现文件

#include "StdAfx.h"
#include "VariantConvert.h" VariantConvert::VariantConvert(void)
{
} VariantConvert::~VariantConvert(void)
{
}
void VariantConvert::short2Variant(short sData,VARIANT& va)
{
va.vt=VT_I2;
va.iVal = sData;
} void VariantConvert:: long2Variant(long lData,VARIANT& va)
{
va.vt = VT_I4;
va.lVal = lData;
} void VariantConvert::float2Variant(float fData,VARIANT& va)
{
va.vt = VT_R4;
va.fltVal = fData;
} void VariantConvert::double2Variant(double dData,VARIANT& va)
{
va.vt = VT_R8;
va.dblVal = dData;
} void VariantConvert::unChar2Variant(unsigned char chData,VARIANT& va)
{
va.vt = VT_UI1;
va.bVal = chData;
} void VariantConvert::arrayDouble2Variant(double *pArray,int iDim,int iDim1Num,int iDim2Num,VARIANT&vaArray)
{ SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[2];// 二维需要定义两个元素
rgsabound[0].lLbound =0; // 一维的下界(下界就是下标的最小值)
rgsabound[0].cElements=iDim1Num; // 一维的元素的个数
rgsabound[1].lLbound =0; // 二维的下界
rgsabound[1].cElements =iDim2Num; // 二维的元素的个数
long lIndex[2]; // 定义索引
psa = SafeArrayCreate(VT_R8,2, rgsabound); // 按照二维数组分配空间
for ( long k = 0; k< iDim1Num; k++)
{
lIndex[0] =k;
for (long num = 0; num < iDim2Num;num++)
{
lIndex[1] =num;
SafeArrayPutElement (psa, lIndex,&pArray[k*iDim2Num+num]); //lIndex作为SAFEARRAY中的索引。
}
} vaArray.vt =VT_ARRAY|VT_R8; // 类型
vaArray.parray =psa; // 赋值 } // One dimension Convert
void VariantConvert::arrayDouble2Variant(double *pArray,int iDimlength,VARIANT &vaArray)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound=0;
rgsabound[0].cElements=iDimlength;
psa = SafeArrayCreate(VT_R8,1,rgsabound);
long lIndex[1];
for (int k=0; k < iDimlength; k++)
{
lIndex[0]=k;
SafeArrayPutElement(psa,lIndex,&pArray[k]);
}
vaArray.vt = VT_ARRAY|VT_R8;
vaArray.parray= psa;
} void VariantConvert::arraylong2Variant(long *pArray,int iDim1Num,int iDim2Num,VARIANT& vaArray)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[2]; // 二维需要定义两个元素
rgsabound[0].lLbound =0; // 一维的下界
rgsabound[0].cElements=iDim1Num; // 一维的元素的个数
rgsabound[1].lLbound =0; // 二维的下界
rgsabound[1].cElements =iDim2Num; // 二维的元素的个数
long lIndex[2]; // 定义索引
psa = SafeArrayCreate(VT_I4, 2, rgsabound); // 按照二维数组分配空间
for ( long k = 0; k < iDim1Num; k++){
lIndex[0] =k;
for (long num = 0; num < iDim2Num;num++ )
{
lIndex[1] =num;
SafeArrayPutElement (psa, lIndex,&pArray[k*iDim2Num+num]); //lIndex作为SAFEARRAY中的索引。
}
}
vaArray.vt = VT_ARRAY|VT_I4;
vaArray.parray = psa;
} void VariantConvert::arraylong2Variant(long *pArray,int iDimlength,VARIANT &vaArray)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound=0;
rgsabound[0].cElements=iDimlength;
psa = SafeArrayCreate(VT_I4,1,rgsabound);
long lIndex[1];
for (int k=0; k < iDimlength; k++)
{
lIndex[0]=k;
SafeArrayPutElement(psa,lIndex,&pArray[k]);
}
vaArray.vt = VT_ARRAY|VT_I4;
vaArray.parray= psa;
}
//
//
//
void VariantConvert::arrayunChar2Variant(byte *pArray,int iDim1Num,int iDim2Num,VARIANT& vaArray)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[2]; // 二维需要定义两个元素
rgsabound[0].lLbound =0; // 一维的下界
rgsabound[0].cElements=iDim1Num; // 一维的元素的个数
rgsabound[1].lLbound =0; // 二维的下界
rgsabound[1].cElements =iDim2Num; // 二维的元素的个数
long lIndex[2]; // 定义索引
psa = SafeArrayCreate(VT_UI1, 2, rgsabound); // 按照二维数组分配空间
for ( long k = 0; k < iDim1Num; k++)
{
lIndex[0] =k;
for (long num = 0; num < iDim2Num;num++)
{
lIndex[1] =num;
SafeArrayPutElement (psa, lIndex,&pArray[k*iDim2Num+num]); //lIndex作为SAFEARRAY中的索引。
}
}
vaArray.vt =VT_ARRAY|VT_UI1; //vaArray为安全数组类型,每个元素为unsigned char 类型
vaArray.parray =psa;
}
//
//
//
void VariantConvert::arrayunChar2Variant(byte *pArray,int iDimlength,VARIANT &vaArray)
{
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound=0;
rgsabound[0].cElements=iDimlength;
psa = SafeArrayCreate(VT_UI1,1,rgsabound);
long lIndex[1];
for (int k=0; k < iDimlength; k++)
{
lIndex[0]=k;
SafeArrayPutElement(psa,lIndex,&pArray[k]);
}
vaArray.vt = VT_ARRAY|VT_UI1;
vaArray.parray= psa;
}
////////////////////////////////////////////////////////////////////////////
//
//
//
// void VariantConvert::Variant2Data(VARIANT vaData, void& Data)
// {
// switch(vaData.vt)
// {
// case VT_I2:
// Data =vaData.iVal;
// break;
// case VT_I4:
// Data =vaData.lVal;
// break;
// case VT_R4:
// Data =vaData.fltVal;
// break;
// case VT_R8:
// Data =vaData.dblVal;
// break;
// case VT_UI1:
// Data =vaData.bVal;
// break;
//
// }
//}
//
//
//
bool VariantConvert::Variant2short(VARIANT vaData, short& sData)
{
if (vaData.vt == VT_I2)
{
sData = vaData.iVal;
return true;
}
else
{
return false;
}
}
//
//
//
bool VariantConvert::Variant2long(VARIANT vaData, long& lData)
{
if (vaData.vt == VT_I4)
{
lData = vaData.iVal;
return true;
}
else
{
return false;
}
}
//
//
//
bool VariantConvert::Variant2float(VARIANT vaData,float& fData)
{
if (vaData.vt == VT_R4)
{
fData = vaData.iVal;
return true;
}
else
{
return false;
}
}
//
//
//
bool VariantConvert::Variant2double(VARIANT vaData,double& dData)
{
if (vaData.vt == VT_R4)
{
dData = vaData.iVal;
return true;
}
else
{
return false;
}
}
//
//
//
void VariantConvert::Variant2Array(VARIANT vaArray,UINT& iDim,long& iDim1Num,long& iDim2Num, LPVOID *pData)
{
// //获得维数
//UINT iDim =SafeArrayGetDim(vaStartMark.parray);
iDim = SafeArrayGetDim(vaArray.parray);
if (iDim != 2)
{
return;
}
// //获得元素大小,这个没什么用
UINT uEleSize = SafeArrayGetElemsize(vaArray.parray ); // 获得一维的下界和上界
long nDim1UBound;
long nDim1LBound;
SafeArrayGetUBound( vaArray.parray, 1, &nDim1UBound);
SafeArrayGetLBound( vaArray.parray, 1, &nDim1LBound);
// //获得二维的下界和上界
long nDim2UBound;
long nDim2LBound;
SafeArrayGetUBound( vaArray.parray, 2, &nDim2UBound);
SafeArrayGetLBound( vaArray.parray, 2, &nDim2LBound);
//
// //计算元素个数,分配空间使用
//long nDim1Count = nDim1UBound - nDim1LBound +1;
//long nDim2Count = nDim2UBound - nDim2LBound + 1;
iDim1Num = nDim1UBound - nDim1LBound + 1;
iDim2Num = nDim2UBound - nDim2LBound +1; int x = 0;
int y = 0;
long lIndex[2];
for ( long nDim1 = nDim1LBound; nDim1 < nDim1UBound; nDim1++)
{
lIndex[0] =nDim1;
y =0;
for ( long nDim2 =nDim2LBound; nDim2 < nDim2UBound; nDim2++)
{
lIndex[1] =nDim2;
SafeArrayGetElement (vaArray.parray, lIndex,pData[x*nDim2UBound+y]);
y++;
}
x++;
} }
//
//
//
void VariantConvert::Variant2Array(VARIANT vaArray,long& lDimLenght,VOID** pData)
{
// //获得维数
//UINT iDim =SafeArrayGetDim(vaStartMark.parray); if (nDim != 1)
{
return;
}
// //获得元素大小,这个没什么用
UINT uEleSize = SafeArrayGetElemsize(vaArray.parray );
// 获得一维的下界和上界
long nDim1UBound;
long nDim1LBound;
SafeArrayGetUBound( vaArray.parray, 1, &nDim1UBound);
SafeArrayGetLBound( vaArray.parray, 1, &nDim1LBound);
// //计算元素个数,分配空间使用
//long nDim1Count = nDim1UBound - nDim1LBound +1;
//long nDim2Count = nDim2UBound - nDim2LBound + 1;
lDimLenght = nDim1UBound - nDim1LBound +1;
// 转换
int x = 0;
int y = 0;
long lIndex[1];
for ( long nDim1 = nDim1LBound; nDim1 < nDim1UBound; nDim1++)
{
SafeArrayGetElement (vaArray.parray, lIndex,&pData[x]);
}
x++;
}

  

常用数据与VARIANT之间的转换---从网上整理的更多相关文章

  1. C# 实现Oracle中的数据与Excel之间的转换

    最近项目要求实现数据库之间数据在各个数据库之间导入导出,在此做个笔记 1. 将Oracle中的表导入到Excel中,反之亦然  private static readonly string conne ...

  2. 37.Activity之间的转换以及数据的传递(Intent)学习

      Intent简介:                                                                                在一个Androi ...

  3. C#字符串和数据之间的转换

    c#中不仅仅存在数值类型的数据之间的转换,字符串和数值之间也是可以互相转换的,只是方法不同而已. 1 数值型转换为字符型 数值型数据转换为字符串用ToString()方法即可实现 int num1=1 ...

  4. java基础类型数据与String类包装类之间的转换与理解

    数据类型转换一般分为三种: 在java中整型,实型,字符型视为简单数据类型,这些数据类型由低到高分别为:(byte,short,char--int-long-float-double) 简单数据类型之 ...

  5. JavaBean和json数据之间的转换(一)简单的JavaBean转换

    1.为什么要使用json? JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,因为其高性能.可读性强的原因,成为了现阶段web开发中前后端交互数据的主要数据 ...

  6. java json数据转List对象的集合-----阿里巴巴插件---及原生json---JSON 与 对象 、集合 之间的转换 JSON字符串和java对象的互转【json-lib】

    List<RunfastFullLess> list=(List<RunfastFullLess>)JSONArray.parseObject(activity.getFull ...

  7. JavaBean和json数据之间的转换(二)含有date类型的JavaBean

    1.前言 上次讲了简单的JavaBean和json格式之间的转换,代码很简单,但是实际过程中,往往用到的JavaBean都是比较复杂的,其他的字段还好,如果JavaBean中包含了date类型的字段, ...

  8. CString-int-string-char-BSTR之间的转换

    一.CString, int, string, char*之间的转换 string 转 CString CString.Format("%s", string.c_str());c ...

  9. Java基础——基本类型和包装类、基本类型和字符串之间的转换

    基本类型和包装类之间的转换 基本类型和包装类之间经常需要互相转换,以 Integer 为例(其他几个包装类的操作雷同哦): 在 JDK1.5 引入自动装箱和拆箱的机制后,包装类和基本类型之间的转换就更 ...

随机推荐

  1. chroot 命令实例讲解

    我是一个刚接触 Linux 和 Unix 的新手.我该如何改变一个命令的根目录?我要怎样改变一个进程的根目录呢,比如用 chroot 命令将web服务与文件系统隔离?我要如何使用 chroot 恢复密 ...

  2. nyoj 27 水池数目

    水池数目 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 南阳理工学院校园里有一些小河和一些湖泊,现在,我们把它们通一看成水池,假设有一张我们学校的某处的地图,这个地 ...

  3. T-SQL语句查看作业等信息

    因服务器需要迁移,需要将现有JOB迁移至新服务器,待服务器调整完毕,则重新迁移到原服务器,所以在做迁移之前希望将现有JOB进行备份,不至于乱了执行时间.1.查看所有作业列表USE master SEL ...

  4. 文件正在上传的转圈圈gif图片引出的fixed定位和absolute定位

     文件正在上传的转圈圈gif图片  一.文件上传时,未上传返回成功状态之前给个gif动态图片显示在页面,改善用户体验. <!--S 遮罩层 --> <div id="mas ...

  5. IFrame 根据嵌入页面自动调节大小

    很多人估计会遇到这样的情况,在IFrame嵌入某些页面,总会出现滚动条,那么有没方法,可以让IFrame随着嵌入页面的内容大小自动调节大小而不出现滚动条呢?答案是肯定的,经过查找,本人发现用Ifram ...

  6. [Javascript] Drawing Paths - Lines and Rectangles

    <!DOCTYPE html> <html> <head> <meta name="description" content=" ...

  7. QT事件

    qtevents多线程工作object存储 Another Look at Events(再谈Events) 最近在学习Qt事件处理的时候发现一篇很不错的文章,是2004年季刊的一篇文章,网上有这篇文 ...

  8. javaHDU1003Max Sum

    import java.util.Scanner;  public class Sum  {public static void main(String args[])  {Scanner cin=n ...

  9. 配置servers时,错误:Setting property 'source' to 'org.eclipse.jst.jee.server:hczm' did not find a matching property

    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.e ...

  10. Android开发之IPC进程间通信-AIDL介绍及实例解析

    一.IPC进程间通信 IPC是进程间通信方法的统称,Linux IPC包括以下方法,Android的进程间通信主要采用是哪些方法呢? 1. 管道(Pipe)及有名管道(named pipe):管道可用 ...