vb調(diào)用動態(tài)鏈接庫

vb調(diào)用動態(tài)鏈接庫

ID:29622938

大?。?3.51 KB

頁數(shù):14頁

時間:2018-12-21

vb調(diào)用動態(tài)鏈接庫_第1頁
vb調(diào)用動態(tài)鏈接庫_第2頁
vb調(diào)用動態(tài)鏈接庫_第3頁
vb調(diào)用動態(tài)鏈接庫_第4頁
vb調(diào)用動態(tài)鏈接庫_第5頁
資源描述:

《vb調(diào)用動態(tài)鏈接庫》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、VB調(diào)用動態(tài)鏈接庫-[Dll編程]作為一種簡單易用的Windows開發(fā)環(huán)境,VisualBasic從一推出就受到了廣大編程人員的歡迎。它使程序員不必再直接面對紛繁復(fù)雜的Windows消息,而可以將精力主要集中在程序功能的實現(xiàn)上,大大提高了編程效率。但凡事有利必有弊。VB中高度的封裝和模塊化減輕了編程者的負擔(dān),同時也使開發(fā)人員失去了許多訪問低層API函數(shù)和直接與Windows交互的機會。因此,相比而言,VB應(yīng)用程序的執(zhí)行效率和功能比C/C++或Delphi生成的程序要差。為了解決這個問題,在一個大型的VB開發(fā)應(yīng)用中,直接調(diào)用WindowsAPI函數(shù)幾乎是不可避

2、免的;同時,還有可能需要程序員自己用C/C++等開發(fā)一些動態(tài)連接庫,用于在VB中調(diào)用。本文主要討論在32位開發(fā)環(huán)境VisualBasic5.0中直接調(diào)用Windows95API函數(shù)或用戶生成的32位動態(tài)連接庫的方法與規(guī)則。  Windows動態(tài)連接庫是包含數(shù)據(jù)和函數(shù)的模塊,可以被其它可執(zhí)行文件(EXE、DLL、OCX等)調(diào)用。動態(tài)連接庫包含兩種函數(shù):輸出(exported)函數(shù)和內(nèi)部(internal)函數(shù)。輸出函數(shù)可以被其它模塊調(diào)用,而內(nèi)部函數(shù)則只能在動態(tài)連接庫內(nèi)部使用。盡管動態(tài)連接庫也能輸出數(shù)據(jù),但實際上它的數(shù)據(jù)通常是只在內(nèi)部使用的。使用動態(tài)連接庫的優(yōu)點

3、是顯而易見的。將應(yīng)用程序的一部分功能提取出來做成動態(tài)連接庫,不但減小了主應(yīng)用程序的大小,提高了程序運行效率,還使它更加易于升級。多個應(yīng)用程序共享一個動態(tài)連接庫還能有效地節(jié)省系統(tǒng)資源。正因為如此,在Windows系統(tǒng)中,動態(tài)連接庫得到了大量的使用?! ∫话銇碚f,動態(tài)連接庫都是以DLL為擴展名的文件,如Kernel32.dll、commdlg.dll等。但也有例外,如16位Windows的核心部件之一GDI.exe其實也是一個動態(tài)庫。編寫動態(tài)連接庫的工具很多,如VisualC++、BorlandC++、Delphi等,具體方法可以參見相關(guān)文檔。下面只以Visua

4、lC++5.0為例,介紹一下開發(fā)應(yīng)用于VisualBasic5.0的動態(tài)連接庫時應(yīng)注意的問題(本文中所有涉及C/C++語言或編譯環(huán)境的地方,都以VC5為例;所有涉及VisualBasic的地方都以VB5為例)。  作為一種32位Windows應(yīng)用程序的開發(fā)工具,VB5生成的exe文件自然也都是32位的,通常情況下也只能調(diào)用32位的動態(tài)連接庫。但是,并不是所有的32位動態(tài)庫都能被VB生成的exe文件正確地識別。一般來說,自己編寫用于VB應(yīng)用程序調(diào)用的動態(tài)連接庫時,應(yīng)注意以下幾個方面的問題:  1、生成動態(tài)庫時要使用__stdcall調(diào)用約定,而不能使用缺省的_

5、_cdecl調(diào)用約定;__stdcall約定通常用于32位API函數(shù)的調(diào)用?! ?、在VC5中的定義文件(.def)中,必須列出輸出函數(shù)的函數(shù)名,以強制VC5系統(tǒng)將輸出函數(shù)的裝飾名(decoratedname)改成普通函數(shù)名;所謂裝飾名是VC的編譯器在編譯過程中生成的輸出函數(shù)名,它包含了用戶定義的函數(shù)名、函數(shù)參數(shù)及函數(shù)所在的類等多方面的信息。由于在VC5中定義文件不是必需的,因此工程不包含定義文件時VC5就按自己的約定將用戶定義的輸出函數(shù)名修改成裝飾名后放到輸出函數(shù)列表中,這樣的輸出函數(shù)在VB生成的應(yīng)用程序中是不能正確調(diào)用的(除非聲明時使用Alias子句)。

6、因此需要增加一個.def文件,其中列出用戶需要的函數(shù)名,以強制VC5不按裝飾名進行輸出?! ?、VC5中的編譯選項"結(jié)構(gòu)成員對齊方式(structurememberalignment)"應(yīng)設(shè)成4字節(jié),其原因?qū)⒃诤笪脑敿毥榻B?! ?、由于在C中整型變量是4個字節(jié),而VB中的整型變量依然只有2個字節(jié),因此在C中聲明的整型(int)變量在VB中調(diào)用時要聲明為長整型(long),而C中的短整型(short)在VB中則要聲明成整型(integer);下表針對最常用的C語言數(shù)據(jù)類型列出了與之等價的VisualBasic類型(用于32位版本的Windows)?! 語言數(shù)

7、據(jù)類型在VisualBasic中聲明為調(diào)用時使用的表達式  ATOMByValvariableAsInteger結(jié)果為Integer類型的表達式  BOOLByValvariableAsLong結(jié)果為Long類型的表達式  BYTEByValvariableAsByte結(jié)果為Byte類型的表達式  CHARByValvariableAsByte結(jié)果為Byte類型的表達式  COLORREFByValvariableAsLong結(jié)果為Long類型的表達式  DWORDByValvariableAsLong結(jié)果為Long類型的表達式  HWND,HDC,HMEN

8、UByValvariableAsLong結(jié)果為Lon

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。