VB如何調(diào)用動(dòng)態(tài)連接庫(kù)

這篇文章主要為大家展示了“VB如何調(diào)用動(dòng)態(tài)連接庫(kù)”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“VB如何調(diào)用動(dòng)態(tài)連接庫(kù)”這篇文章吧。

目前累計(jì)服務(wù)客戶成百上千,積累了豐富的產(chǎn)品開(kāi)發(fā)及服務(wù)經(jīng)驗(yàn)。以網(wǎng)站設(shè)計(jì)水平和技術(shù)實(shí)力,樹(shù)立企業(yè)形象,為客戶提供做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站策劃、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)絡(luò)營(yíng)銷(xiāo)、VI設(shè)計(jì)、網(wǎng)站改版、漏洞修補(bǔ)等服務(wù)。創(chuàng)新互聯(lián)始終以務(wù)實(shí)、誠(chéng)信為根本,不斷創(chuàng)新和提高建站品質(zhì),通過(guò)對(duì)領(lǐng)先技術(shù)的掌握、對(duì)創(chuàng)意設(shè)計(jì)的研究、對(duì)客戶形象的視覺(jué)傳遞、對(duì)應(yīng)用系統(tǒng)的結(jié)合,為客戶提供更好的一站式互聯(lián)網(wǎng)解決方案,攜手廣大客戶,共同發(fā)展進(jìn)步。

VB有很多值得學(xué)習(xí)的地方,這里我們主要介紹VB調(diào)用動(dòng)態(tài)連接庫(kù),包括介紹C語(yǔ)言數(shù)據(jù)類(lèi)型在Visual Basic中聲明為調(diào)用時(shí)使用的表達(dá)式等方面。

作為一種簡(jiǎn)單易用的Windows開(kāi)發(fā)環(huán)境,Visual Basic從一推出就受到了廣大編程人員的歡迎。它使程序員不必再直接面對(duì)紛繁復(fù)雜的Windows消息,而可以將精力主要集中在程序功能的實(shí)現(xiàn)上,大大提高了編程效率。但凡事有利必有弊。VB中高度的封裝和模塊化減輕了編程者的負(fù)擔(dān),同時(shí)也使開(kāi)發(fā)人員失去了許多訪問(wèn)低層API函數(shù)和直接與Windows 交互的機(jī)會(huì)。因此,相比而言,VB應(yīng)用程序的執(zhí)行效率和功能比C/C++或Delphi生成的程序要差。為了解決這個(gè)問(wèn)題,在一個(gè)大型的VB開(kāi)發(fā)應(yīng)用中,直接調(diào)用Windows API函數(shù)幾乎是不可避免的;同時(shí),還有可能需要程序員自己用C/C++等開(kāi)發(fā)一些動(dòng)態(tài)連接庫(kù),用于在VB調(diào)用動(dòng)態(tài)連接庫(kù)。本文主要討論在32位開(kāi)發(fā)環(huán) 境Visual Basic 5.0中直接調(diào)用Windows 9***PI函數(shù)或用戶生成的32位動(dòng)態(tài)連接庫(kù)的方法與規(guī)則。

Windows動(dòng)態(tài)連接庫(kù)是包含數(shù)據(jù)和函數(shù)的模塊,可以被其它可執(zhí)行文件(EXE、DLL、 OCX 等)調(diào)用。動(dòng)態(tài)連接庫(kù)包含兩種函數(shù):輸出(exported)函數(shù)和內(nèi)部(internal)函數(shù)。輸出函數(shù)可以被其它模塊調(diào)用,而內(nèi)部函數(shù)則只能在動(dòng)態(tài)連接庫(kù)內(nèi)部使用。盡管動(dòng)態(tài)連接庫(kù)也能輸出 數(shù)據(jù),但實(shí)際上它的數(shù)據(jù)通常是只在內(nèi)部使用的。使用動(dòng)態(tài)連接庫(kù)的優(yōu)點(diǎn)是顯而易見(jiàn)的。將應(yīng)用程序的一部分功能提取出來(lái)做成動(dòng)態(tài)連接庫(kù),不但減小了主應(yīng)用程序的大小,提高了程序運(yùn)行效率,還使它更加易于升級(jí)。多個(gè)應(yīng)用程序共享一個(gè)動(dòng)態(tài)連接庫(kù)還能有效地節(jié)省系統(tǒng)資源。正因?yàn)槿绱?,在Windows系統(tǒng)中,動(dòng)態(tài)連接庫(kù)得到了大量的使用。

一般來(lái)說(shuō),動(dòng)態(tài)連接庫(kù)都是以DLL為擴(kuò)展名的文件,如Kernel32.dll、 commdlg.dll等。但也有例外,如16位Windows的核心部件之一GDI.exe其實(shí)也是一個(gè)動(dòng)態(tài)庫(kù)。編寫(xiě)動(dòng)態(tài)連接庫(kù)的工具很多,如 VisualC++、BorlandC++、Delphi等,具體方法可以參見(jiàn)相關(guān)文檔。下面只以Visual C++5.0為例,介紹一下開(kāi)發(fā)應(yīng)用于VisualBasic5.0的動(dòng)態(tài)連接庫(kù)時(shí)應(yīng)注意的問(wèn)題(本文中所有涉及C/C++語(yǔ)言或編譯環(huán)境的地方,都以 VC5為例;所有涉及VisualBasic的地方都以VB5 為例)。

作為一種32位Windows應(yīng)用程序的開(kāi)發(fā)工具,VB5生成的exe文件自然也都是32位的,通常情況下也只能調(diào)用32位的動(dòng)態(tài)連接庫(kù)。但是,并不是所有的32位動(dòng)態(tài)庫(kù)都能被VB生成的exe 文件正確地識(shí)別。一般來(lái)說(shuō),自己編寫(xiě)用于VB調(diào)用動(dòng)態(tài)連接庫(kù)時(shí),應(yīng)注意以下幾個(gè)方面的問(wèn)題:

1、生成動(dòng)態(tài)庫(kù)時(shí)要使用__stdcall調(diào)用約定,而不能使用缺省的__cdecl調(diào)用約定;__stdcall 約定通常用于32位API函數(shù)的調(diào)用。

2、在VC5中的定義文件(.def)中,必須列出輸出函數(shù)的函數(shù)名,以強(qiáng)制VC5系統(tǒng)將輸出函數(shù)的裝飾名(decoratedname)改成普通函數(shù)名;所謂裝飾名是VC的編譯器在編譯過(guò)程中生成的輸出函數(shù)名,它包含了用戶定義的函數(shù)名、函數(shù)參數(shù)及函數(shù)所在的類(lèi)等多方面的信息。由于在VC5中定義文件不是必需的,因此工程不包含定義文件時(shí)VC5就按自己的約定將用戶定義的輸出函數(shù)名修改成裝飾名后放到輸出函數(shù)列表中,這樣的輸出函數(shù)在VB生成的應(yīng)用程序中是不能正確調(diào)用的(除非聲明時(shí)使用Alias子句)。因此需要增加一個(gè).def文件,其中列出用戶需要的函數(shù)名,以強(qiáng)制VC5不按裝飾名進(jìn)行輸出。

3、VC5中的編譯選項(xiàng)"結(jié)構(gòu)成員對(duì)齊方式(structure member alignment)" 應(yīng)設(shè)成4字節(jié),其原因?qū)⒃诤笪脑敿?xì)介紹。

4、由于在C中整型變量是4個(gè)字節(jié),而VB中的整型變量依然只有2個(gè)字節(jié),因此在C中聲明的整型(int)變量在VB中調(diào)用時(shí)要聲明為長(zhǎng)整型(long),而C中的短整型(short)在VB中則要聲明成整型(integer);下表針對(duì)最常用的C語(yǔ)言數(shù)據(jù)類(lèi)型列出了與之等價(jià)的Visual Basic 類(lèi)型(用于32位版本的Windows)。

C語(yǔ)言數(shù)據(jù)類(lèi)型在Visual Basic中聲明為調(diào)用時(shí)使用的表達(dá)式
◆ATOM ByVal variable As Integer 結(jié)果為Integer 類(lèi)型的表達(dá)式
◆BOOL ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆BYTE ByVal variable As Byte 結(jié)果為 Byte 類(lèi)型的表達(dá)式
◆CHAR ByVal variable As Byte 結(jié)果為 Byte 類(lèi)型的表達(dá)式
◆COLORREF ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆DWORD ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆HWND, HDC, HMENU ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式等Windows 句柄
◆INT, UINT ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆LONG ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆LPARAM ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆LPDWORD variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆LPINT, LPUINT variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆LPRECT variable As type 自定義類(lèi)型的任意變量
◆LPSTR, LPCSTR ByVal variable As String 結(jié)果為 String 類(lèi)型的表達(dá)式
◆LPVOID variable As Any 任何變量(在傳遞字符串的時(shí)候使用ByVal)
◆LPWORD variable As Integer 結(jié)果為Integer 類(lèi)型的表達(dá)式
◆LRESULT ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式
◆NULL As Any 或 ByVal Nothing 或
◆ByVal variable As Long ByVal 0& 或 VBNullString
◆SHORT ByVal variable As Integer 結(jié)果為Integer 類(lèi)型的表達(dá)式
◆VOID Sub procedure 不可用
◆WORD ByVal variable As Integer 結(jié)果為Integer 類(lèi)型的表達(dá)式
◆WPARAM ByVal variable As Long 結(jié)果為 Long 類(lèi)型的表達(dá)式

5、VB中進(jìn)行32位動(dòng)態(tài)庫(kù)的聲明時(shí),函數(shù)名是大小寫(xiě)敏感的。在獲得了需要的動(dòng)態(tài)連接庫(kù)之后,就可以在VB調(diào)用動(dòng)態(tài)連接庫(kù)了。但是,由于VB不能驗(yàn)證應(yīng)用程序傳遞到動(dòng)態(tài)連接庫(kù)中的參數(shù)值是否正確,因此VB程序中大量的API調(diào)用可能會(huì)降低整個(gè)應(yīng)用程序的穩(wěn)定性,也會(huì)增加以后維護(hù)的難度。所以,決定在VB程序中直接調(diào)用API函數(shù)時(shí)要慎重,但適當(dāng)?shù)氖褂肁PI調(diào)用確實(shí)能夠有效地提高VB程序的性能。這之間的平衡需要編程人員根據(jù)實(shí)際情況來(lái)掌握。

以上是“VB如何調(diào)用動(dòng)態(tài)連接庫(kù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前標(biāo)題:VB如何調(diào)用動(dòng)態(tài)連接庫(kù)
轉(zhuǎn)載來(lái)于:http://muchs.cn/article42/ihsjec.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、網(wǎng)站導(dǎo)航網(wǎng)站排名、ChatGPT虛擬主機(jī)、App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)