在使用vb
呼叫vc
寫的dll的時候,可以實現一些vb
不能實現或者很難實現的功能,但是,因為vb
與vc之間的資料型別並不總是完全對應的,所以,在進行引數傳遞的時候,就需要進行型別轉換了。下面我將通過逐步的推進的方法,來看看如何達到vb
與vc之間的通訊。
首先,看乙個簡單的例子。
vc中的程式:
extern "c" _declspec(dllexport) voidreadstring(void)
將這個vc
程式編譯成dll程式供vb
呼叫(假設生成的為commication.dll)
vb中的程式:
……………………private declare function readstring lib "commication.dll" ()
……………………
call readstring
在這裡,我們實現了乙個簡單的通訊,即在vc
中寫了乙個dll,然後再在vb
中呼叫了這個dll,但是,在這次的通訊中,實際上他們之間沒有傳遞任何資料,僅僅是vb
呼叫了dll,從而使得commication.dll中的函式readstring()函式執行。這種通訊實現是非常簡單,所以他完成的功能也就非常的簡單,然而我們的要求肯定不止於此。
現在就讓我們來實現乙個使用dll來處理vb
中的資料的例子,並且將處理結果返回給vb
程式:
vc中的程式:
extern "c" _declspec(dllexport) boolreadstring(bool receive)
vb中的程式:
……………………
private declare function readstring lib "commication.dll" (byval send as boolean) as boolean
……………………
dim result as boolean
dim send as boolean
send = false
result = readstring(send)
if result then
msgbox "the return value is 'true'"
else
msgbox "the return value is 'false'"
end if
在這次的通訊過程中,我們還是實現了乙個很簡單的通行過程,在dll中,根據vb
呼叫的時候傳遞進來的引數將接收到的引數返回給了vb
呼叫程式,雖然簡單,但是已經實現了vb
與dll之間的資料傳遞了,在這裡要注意的是它們之間的資料型別,布林型別的資料在vc
中使用的關鍵字是boolean,而在vc
中使用的關鍵字則是bool。
由於vb
與vc之間的資料型別沒有相同的關鍵字,為了方便,下面列出常用資料型別在vc
與vb中分別使用的關鍵字以及它們之間的對應關係:
c中的資料型別 vb中的宣告 結果
atom byval variable as integer 結果為integer 型別的表示式
bool byval variable as boolean 結果為long 型別的表示式
byte byval variable as byte 結果為byte 型別的表示式
char byval variable as byte 結果為byte 型別的表示式
colorref byval variable as long 結果為long 型別的表示式
dword byval variable as long 結果為long 型別的表示式
hwnd, hdc, hmenu byval variable as long 結果為long 型別的表示式等windows 控制代碼
int, uint byval variable as long 結果為long 型別的表示式
long byval variable as long 結果為long 型別的表示式
lparam byval variable as long 結果為long 型別的表示式
lpdword variable as long 結果為long 型別的表示式
lpint, lpuint variable as long 結果為long 型別的表示式
lprect variable as type 自定義型別的任意變數
lpstr, lpcstr byval variable as string 結果為string 型別的表示式
lpvoid variable as any 任何變數(在傳遞字串的時候使用byval)
lpword variable as integer 結果為integer 型別的表示式
lresult byval variable as long 結果為long 型別的表示式
null as any 或byval nothing 或byval variable as long byval 0& 或vbnullstring
short byval variable as integer 結果為integer 型別的表示式
void sub procedure 不可用
word byval variable as integer 結果為integer 型別的表示式
wparam byval variable as long 結果為long 型別的表示式
初探 程序通訊與執行緒同步
不推薦使用signal 介面,推薦使用sigacton 相關介面 訊號集處理函式 int sigemptyset sigset t set int sigfillset sigset t set int sigdelset sigset t set,int signo int sigmember s...
初探remoting雙向通訊(一)
原 2013年06月24日 15 47 07 喜歡特別冷的冬天下著雪 閱讀數 4389 一 從乙個小例子開始 1.0定義物件 namespace remotesample public int sum int a,int b 將其編譯為乙個lib檔案 csc t library remoteobje...
VC與VB的三大區別
這是我以前碰到的乙個面試題,當時我對這兩者都不甚熟悉,且發現面試官態度傲慢,就胡亂的說了兩個答案。突然間有想到這個問題,本著對自己負責任態度,得出的答案如下 1.兩者的設計出發點不一樣.vc更注重程式的效率,而vb則強調易用性 2.vc為編譯型,編譯後得到的程式可直接執行。vb為解釋型,編譯後得到的...