學會使用SafeArray

2021-04-01 02:43:42 字數 1760 閱讀 8318

學會使用safearray也是很重要的,因為在ado程式設計中經常要用。它的主要目的是用於automation中的陣列型引數的傳遞。因為在網路環境中,陣列是不能直接傳遞的,而必須將其包裝成safearray。實質上safearray就是將通常的陣列增加乙個描述符,說明其維數、長度、邊界、元素型別等資訊。safearray也並不單獨使用,而是將其再包裝到variant型別的變數中,然後才作為引數傳送出去。在variant的vt成員的值如果包含vt_array|...,那麼它所封裝的就是乙個safearray,它的parray成員即是指向safearray的指標。safearray中元素的型別可以是variant能封裝的任何型別,包括variant型別本身。

使用safearray的具體步驟:

方法一:

包裝乙個safearray:

(1). 定義變數,如:

variant varchunk;

safearray *psa;

safearraybound rgsabound[1];

(2). 建立safearray描述符:

uisread=f.read(bval,chunksize);//read array from a file.

if(uisread==0)break;

rgsabound[0].celements =uisread;

rgsabound[0].llbound = 0;

psa = safearraycreate(vt_ui1,1,rgsabound);

(3). 放置資料元素到safearray:

for(long index=0;index

乙個乙個地放,挺麻煩的。

(4). 封裝到variant內:

varchunk.vt = vt_array|vt_ui1;

varchunk.parray = psa;

這樣就可以將varchunk作為引數傳送出去了。

讀取safearray中的資料的步驟:

(1). 用safearraygetelement乙個乙個地讀

byte buf[lisread];

for(long index=0;index

就讀到緩衝區buf裡了。

方法二:

使用safearrayaccessdata直接讀寫safearray的緩衝區:

(1). 讀緩衝區:

byte *buf;

safearrayaccessdata(varchunk.parray, (void **)&buf);

f.write(buf,lisread);

safearrayunaccessdata(varchunk.parray);

(2). 寫緩衝區:

byte *buf;

::safearrayaccessdata(psa, (void **)&buf);

for(long index=0;index

::safearrayunaccessdata(psa);

varchunk.vt = vt_array|vt_ui1;

varchunk.parray = psa;

這種方法讀寫safearray都可以,它直接操縱safearray的資料緩衝區,比用safearraygetelement和safearrayputelement速度快。特別適合於讀取資料。但用完之後不要忘了呼叫::safearrayunaccessdata(psa),否則會出錯的。

學會使用SafeArray

學會使用safearray也是很重要的,因為在ado程式設計中經常要用。它的主要目的是用於automation中的陣列型引數的傳遞。因為在網路環境中,陣列是不能直接傳遞的,而必須將其包裝成safearray。實質上safearray就是將通常的陣列增加乙個描述符,說明其維數 長度 邊界 元素型別等資...

學會使用Git

作為一名人民的好幹部,如果希望被惦記,可以學我們的鄭書記,將自己和藹可親的光輝形象搬上檯曆 作為一名有夢想有追求而又不知道如何出名的人,你可以參考對岸的 超想被包養 社團。而作為乙個核心愛好者,要想成為一名核心開發者,為核心貢獻自己的 我們必須要能夠與其他眾多的核心開發者協同工作,這就意味著應該能夠...

學會使用ODBC API

雖說以前也接觸過一些資料庫的應用,但是由於當時只是抱著非常淺顯的資料庫知識,做了一些sql語句上的操作,安裝 配置 連線這一系列的流程全是自己照著例子實現的,大概記住的也就是odbc ado之類,也簡單的理解了一下,當共享使用資料庫時最好使用odbc的方式,而本地的資料庫就可以使用ado。具體區別這...