VARIANT 使用案例

2021-05-09 02:34:44 字數 1583 閱讀 2938

// testlink.cpp : 定義控制台應用程式的入口點。

//#include "stdafx.h"

#include

int _tmain(int argc, _tchar* argv)

;double array1[2]=;

variant vt;

vt.vt = vt_array|vt_r8;

safearraybound rgsabound[1];

rgsabound[0].llbound = 0;

rgsabound[0].celements = 2;

safearray *psa = safearraycreate( vt_r8,1, rgsabound );

//打包資料方法一

char *pdata = null;

safearrayaccessdata( psa, (void **)&pdata );

memcpy(pdata, (char *)&array[0],8);

memcpy(pdata+8, (char *)&array[1],8);

safearrayunaccessdata(psa);

/*打包資料方法二

for(long i=0;i<2;i++)

*/vt.parray = psa;

//取元素

for(long j=0;j<2;j++)

return 0;

}取variant中元素內容使用到的一些函式, (variant &varg )

//型別檢查

if( ( vt_null == varg.vt ) || ( vt_empty == varg.vt ) )

else if(  0 == ( varg.vt & vt_array ) )

//檢查陣列是否一維

safearray *psa = varg.parray;

uint ndims = safearraygetdim( psa );

if( ndims != 1 )

//檢查陣列元素型別

vartype vt = 0;

safearraygetvartype( psa, &vt );

if( vt != vt_ui1 )

//檢查陣列上下限和元素個數

long lubound =0, llbound = 0;

safearraygetubound( psa, 1, &lubound );

safearraygetlbound( psa, 1, &llbound );

long lelements = lubound - llbound + 1;

if( 0 == lelements )

else if( lelements < 0 /*|| lelements > 255*/ )

//取資料內容位址

byte *pdata = null;

safearrayaccessdata( psa, (void **)&pdata );

if( null == pdata )

safearrayunaccessdata( psa );

return 0;

Delphi Stream和Variant的轉化

網上廣為流傳的兩個函式,確實好用。記錄一下 procedurevarianttostream constv olevariant stream tmemorystream var p pointer begin stream.position 0 stream.size vararrayhighbo...

使用VARIANT傳遞陣列的方法及步驟

在使用com dcom寫元件時經常要傳遞陣列,一般比如short,long等指標可以直接傳遞相應的指標,但是當遇到需要傳遞byte陣列就有問題了,com不支援byte型別引數,傳遞byte陣列也就無從說起了。經過查詢資料發現使用variant變數可以傳遞任何型別的陣列,隨將使用variant陣列的方...

VARIANT 資料型別

variant 資料型別在檔案oaidl.idl中定義如下 vc中資料型別,對應類為 variant t struct tagvariant variant name 4 vt record variant name 3 variant name 2 decimal decval variant n...