學會使用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。具體區別這...