VB與VC通訊初探(一)

2021-06-16 01:04:13 字數 3230 閱讀 6089

在使用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為解釋型,編譯後得到的...