要搞清楚这个问题首先要明白什么VARIANT类型,这样就很容易的知道如何从一个long型数组构建一个VARIANT结构。
什么是VARIANT类型:
实际上VARIANT也只不过是一个新定义的结构罢了,它的主要成员包括一个联合体及一个变量。该联合体由各种类型的数据成员构成, 而该变量则用来指明联合体中目前起作用的数据类型。我们所关心的接收到的数据就存储在该联合体的某个数据成员中。 该联合体中包含的数据类型很多,从一些简单的变量到非常复杂的数组和指针。
什么是VARIANT类型:
实际上VARIANT也只不过是一个新定义的结构罢了,它的主要成员包括一个联合体及一个变量。该联合体由各种类型的数据成员构成, 而该变量则用来指明联合体中目前起作用的数据类型。我们所关心的接收到的数据就存储在该联合体的某个数据成员中。 该联合体中包含的数据类型很多,从一些简单的变量到非常复杂的数组和指针。
既然VARIANT是一个联合体,那我们从long转换到它就有了基本思路了,我们知道联合体的一个基本特性,实际上就是一个多种类型的泛指,可以当做联合体中的任何类型来处理,最终有编译器来帮我们处理实际的细节,好多脚本语言底层的实现都是利用了联合体的这个特性,在COM中为了接口的兼容性和灵活性也使用了联合体的这个特性,具体实现方式就如@马瑜所实现的,我只说下原理哈。
long 数组转Variant
- void longArray2Variant(long lData, lon lData1, long lData2, long lData3,VARIANT& var)
- {
- CComSafeArray<long> arrays(4);
- arrays.SetAt(0, lData);
- arrays.SetAt(1, lData1);
- arrays.SetAt(2, lData2);
- arrays.SetAt(3, lData3);
-
- CComVariant src(arrays);
-
- VariantCopy(var, &src);
- }