//头文件
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. 如何在Maven官网下载到历史版本

    历史版本一般会隔一段时间,便找不到,官网会及时显示的是最新版本.不多说,直接进入. https://archive.apache.org/dist/maven/binaries/ 成功在Maven官网 ...

  2. 使用 IntelliJ IDEA 导入 Spark 最新源码及编译 Spark 源代码

    前言   其实啊,无论你是初学者还是具备了有一定spark编程经验,都需要对spark源码足够重视起来. 本人,肺腑之己见,想要成为大数据的大牛和顶尖专家,多结合源码和操练编程. 准备工作 1.sca ...

  3. JQuery简单实现锚点链接的平滑滚动

    在平时的项目中,我们经常需要一些特效链接,如果使效果进一步加强,我们可以使点击锚点链接平滑滚动到锚点,下面就来给大家讲解下如何使用jQuery来实现.   一般使用锚点来跳转到页面指定位置的时候,会生 ...

  4. OcciWrapper使用指南(高性能Oracle访问组件)

    occiwrapper使用指南 occiwrapper是一个开源的.跨平台的Oracle访问组件, 方便C++开发者们灵活地操作oracle数据库.为了方便使用,组件中的接口形式参考的POCO库的使用 ...

  5. invoke-command

    远程执行命令: invoke-command -ComputerName $server -Credential $cred -ScriptBlock{param($server,$UserName, ...

  6. JAVA编程心得-多态设计初步

    面向对象的思想中,封装,继承,多态作为特性会在开发中广泛应用,一个健壮的系统除了功能强大以外,它的可扩展性应该也很强,多态恰好应用了这个思路. 下面我以杨小聪去某地的方式为例,我们知道首先杨小聪要去某 ...

  7. qt QSqlQuery

    QT数据库QSqlQuery   SQL执行操作 QSqlQuery提供了对数据库记录的Select.Insert.Update.Delete操作. SELECT操作: QSqlQuery query ...

  8. C#泛型对类型参数的推断

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. PPTP、L2TP、IPSec和SSLVPN的区别

    VPN (虚拟专用网)发展至今已经不在是一个单纯的经过加密的访问隧道了,它已经融合了访问控制.传输管理.加密.路由选择.可用性管理等多种功能,并在全球的信息安全体系中发挥着重要的作用.也在网络上,有关 ...

  10. Java基础知识强化之IO流笔记57:数据输入输出流(操作基本数据类型)

    1. 数据输入输出流(操作基本数据类型) (1)数据输入流:DataInputStream DataInputStream(InputStream in) (2)数据输出流:DataOutputStr ...