成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳細描述VB調用動態連接庫

開發 后端
這里介紹VB調用動態連接庫,VB使程序員不必再直接面對紛繁復雜的Windows消息,而可以將精力主要集中在程序功能的實現上,大大提高了編程效率。

VB有很多值得學習的地方,這里我們主要介紹VB調用動態連接庫,包括介紹C語言數據類型在Visual Basic中聲明為調用時使用的表達式等方面。

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

Windows動態連接庫是包含數據和函數的模塊,可以被其它可執行文件(EXE、DLL、 OCX 等)調用。動態連接庫包含兩種函數:輸出(exported)函數和內部(internal)函數。輸出函數可以被其它模塊調用,而內部函數則只能在動態連接庫內部使用。盡管動態連接庫也能輸出 數據,但實際上它的數據通常是只在內部使用的。使用動態連接庫的優點是顯而易見的。將應用程序的一部分功能提取出來做成動態連接庫,不但減小了主應用程序的大小,提高了程序運行效率,還使它更加易于升級。多個應用程序共享一個動態連接庫還能有效地節省系統資源。正因為如此,在Windows系統中,動態連接庫得到了大量的使用。

一般來說,動態連接庫都是以DLL為擴展名的文件,如Kernel32.dll、 commdlg.dll等。但也有例外,如16位Windows的核心部件之一GDI.exe其實也是一個動態庫。編寫動態連接庫的工具很多,如 VisualC++、BorlandC++、Delphi等,具體方法可以參見相關文檔。下面只以Visual C++5.0為例,介紹一下開發應用于VisualBasic5.0的動態連接庫時應注意的問題(本文中所有涉及C/C++語言或編譯環境的地方,都以 VC5為例;所有涉及VisualBasic的地方都以VB5 為例)。

作為一種32位Windows應用程序的開發工具,VB5生成的exe文件自然也都是32位的,通常情況下也只能調用32位的動態連接庫。但是,并不是所有的32位動態庫都能被VB生成的exe 文件正確地識別。一般來說,自己編寫用于VB調用動態連接庫時,應注意以下幾個方面的問題:

1、生成動態庫時要使用__stdcall調用約定,而不能使用缺省的__cdecl調用約定;__stdcall 約定通常用于32位API函數的調用。

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

3、VC5中的編譯選項"結構成員對齊方式(structure member alignment)" 應設成4字節,其原因將在后文詳細介紹。

4、由于在C中整型變量是4個字節,而VB中的整型變量依然只有2個字節,因此在C中聲明的整型(int)變量在VB中調用時要聲明為長整型(long),而C中的短整型(short)在VB中則要聲明成整型(integer);下表針對最常用的C語言數據類型列出了與之等價的Visual Basic 類型(用于32位版本的Windows)。

C語言數據類型在Visual Basic中聲明為調用時使用的表達式
◆ATOM ByVal variable As Integer 結果為Integer 類型的表達式
◆BOOL ByVal variable As Long 結果為 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 類型的表達式

5、VB中進行32位動態庫的聲明時,函數名是大小寫敏感的。在獲得了需要的動態連接庫之后,就可以在VB調用動態連接庫了。但是,由于VB不能驗證應用程序傳遞到動態連接庫中的參數值是否正確,因此VB程序中大量的API調用可能會降低整個應用程序的穩定性,也會增加以后維護的難度。所以,決定在VB程序中直接調用API函數時要慎重,但適當的使用API調用確實能夠有效地提高VB程序的性能。這之間的平衡需要編程人員根據實際情況來掌握。下面就具體介紹一下在VB中調用API函數時需要做的工作。

【編輯推薦】

  1. 講解VB.NET訪問注冊表方法
  2. 淺析VB.NET開發自動分頁
  3. VB.NET ListView控件經驗總結
  4. 概括VB.NET獲取網卡地址的步驟
  5. 講述VB.NET制作透明窗體
責任編輯:佚名 來源: IT168
相關推薦

2009-10-13 17:16:40

VB.NET Web服

2009-10-12 12:54:58

VB.NET聲明API

2009-10-15 15:04:42

VB.NET PadL

2009-10-10 16:15:49

VB.NET開發多線程

2009-09-03 17:59:18

C#調用事件

2009-09-14 16:33:55

LINQ To XML

2009-09-24 16:19:53

Hibernate應用

2009-09-25 14:28:40

Hibernate S

2009-09-14 13:14:49

LINQ序列

2009-09-14 14:58:52

LINQ to XML

2009-11-18 11:14:49

2010-02-05 16:58:18

Android服務

2009-11-05 13:17:32

Visual Stud

2009-08-27 15:17:40

C# const變量

2009-08-26 15:53:48

C#擴展方法

2009-09-07 15:15:43

2009-10-10 10:04:50

RHEL合法使用

2009-08-10 16:40:03

C#索引器

2009-09-08 11:09:39

LINQ數據源

2010-04-09 17:45:06

Oracle索引
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产 欧美 日韩 一区 | 亚州中文字幕 | 国产精品美女www爽爽爽视频 | 午夜丰满寂寞少妇精品 | 久久成人av | 国产第一页在线观看 | 91精产国品一二三区 | 日本字幕在线观看 | 亚洲网站在线观看 | 亚洲午夜视频在线观看 | 在线播放亚洲 | 国产一区二区精品在线 | 亚洲精品一区二区三区中文字幕 | 天天干天天干 | 91精品国产91久久久久久密臀 | 激情福利视频 | 97中文视频 | 久久久久久久久久一区二区 | 亚洲精品视频在线 | 精品国产久 | 欧美黑人一级爽快片淫片高清 | 国产综合精品一区二区三区 | 波多野吉衣在线播放 | 天天天久久久 | 免费黄色av网站 | 91超碰caoporn97人人 | 精品国产欧美一区二区三区成人 | 精品久久ai电影 | 鲁一鲁资源影视 | 草草影院ccyy | 一级黄色播放 | 日本电影一区二区 | 国产一区二区三区四区在线观看 | 国产成人99久久亚洲综合精品 | 成人亚洲视频 | 国产一区二区三区在线免费观看 | 狠狠艹 | 日本不卡一区二区三区 | 一级全黄少妇性色生活免费看 | 久久岛国| 国产一区不卡 |