VB中如何傳遞指標給DLL

2021-04-12 18:30:00 字數 936 閱讀 9029

vb預設的傳遞方式就是傳指標(byref,也就是把變數的位址傳遞給所呼叫的函式)。如果要傳值(也就是把變數的值傳遞給所呼叫的函式)反要在引數宣告前加byval。所以如果你傳遞的引數是普通的資料型別,在引數前什麼都不要加就行了。如c語言宣告為:

void __stdcall myproc(short * npara);

則vb宣告為:

declare function myproc lib "mydll.dll" (npara as integer)

呼叫時同普通函式。

如果c語言中的指標是字串指標,那麼在vb宣告時需要加上byval,這是個例外。如c語言宣告為:

void __stdcall myproc(char * spara);

則vb宣告為:

declare function myproc lib "mydll.dll" (byval spara as string)

呼叫時同普通函式。

如果c語言的指標是陣列指標,則在vb中呼叫時應將陣列的首元素傳遞給dll。如c語言宣告為:

void __stdcall myproc(int arrpara);

則vb宣告為:

declare function myproc lib "mydll.dll" (npara as string)

呼叫時為myproc a(0)。

注意:不能直接傳遞陣列名,因為如果傳遞陣列名,vb實際會傳乙個複雜的結構型別給dll,這對編寫c語言的dll來說,處理這樣的結構比較麻煩,所以通常都不支援這種方式。 

vb呼叫dll時,以byval方式傳遞字串引數的型別是bstr(主持人注:bstr的處理方法同char *),以byref方式傳遞字串引數的型別是bstr*。下面是以byref方式傳遞引數的例子:

void _stdcall passstring(bstr* pbstr)

C 寫的DLL,傳結構給VB用

由於某些情況下,我們需要用cb或是vc寫乙個dll,而呼叫它的確實vb。這裡特別強調一下使用標準資料型別的問題,就是說用c 寫的東西,匯出的函式最好使用標準的int,char,long,double.標準型別以及他們的指標。很多人都強調過這個問題。但是我最近遇到乙個需要vb傳結構給cb做的dll,然...

如何給OPENQUERY傳遞引數

發現sql server裡,直接呼叫鏈結伺服器的函式是不可以的。create function func test userid int returns table asreturn select from 192.168.0.252 user dbo.func getdata userid go ...

c 中如何給函式傳遞陣列引數

在c 中,如果要給乙個函式傳入乙個陣列,一般都是傳入兩個引數乙個陣列指標和乙個陣列大小 例 void print 1 int n,int datas std cout std endl 對這個函式,我們可以這樣使用它 const int n 3 int datas n print 1 n,datas...