// 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...