當前位置:編程學習大全網 - 源碼下載 - Vb鈴聲系統源代碼

Vb鈴聲系統源代碼

打電話

嗯。多有趣啊

妳明白什麽是api嗎?

什麽是API?

首先,有必要告訴妳什麽是API。所謂的API,本來就是給C和C++程序員寫的。API是壹種函數,包含在名為DLL的動態鏈接庫文件中。按照標準定義,API是Windows的32位應用編程接口,是壹系列復雜的函數、消息和結構。它使程序員能夠用不同的編程語言編譯運行在Windows95和Windows NT操作系統上的應用程序。可以說,如果妳學過VC,那麽API對妳來說不是問題。但是如果妳沒有學過VC,或者不熟悉Windows95的架構,可以說學習API會是壹件非常辛苦的事情。

如果打開WINDOWS的系統文件夾,可以發現有很多名為DLL的附件。壹個DLL包含不止壹個API函數,幾十個甚至上百個。我們都能掌握它嗎?答案是否定的:不可能掌握。但實際上,我們真的不需要全部掌握,只要專註於掌握Windos系統本身自帶的API函數就可以了。不過在裏面也要去掉和VB自帶函數重復的函數。比如VB

的etAttr命令可以獲取文件屬性,SetAttr可以設置文件屬性。API也有相應的函數。

GetFileAttributes和SetFileAttributes具有相似的性能。這樣壹算,只剩5、600了。是的,相當多。但是,我可以告訴妳,只要妳熟悉100,妳的編程水平至少比現在高壹倍。雖然有人說VB和WINDOWS關系密切,但我覺得API更近。

窗戶.如果學習API,首先收獲的是對WINDOWS架構的理解。這種收獲並不容易。

如果不依賴API會怎樣?我可以告訴妳,大部分都是高級編程的書(當然這不是叫高級和進階的書名,而是那些在書的內容開頭註明這本書的閱讀對象是有壹定VB基礎的讀者的書),第壹題壹般都是從API開始的。所以可以說,不學API,很可能就停留在初級水平,爬不上去。也許唯壹的辦法是向別人求助:我快死了。過來幫我。這個那個呢?妳覺得無聊嗎?當然現在網上好人太多了(包括我,嘻嘻),但是妳要明白,這樣是出不了好作品的。這是因為沒有這些知識,妳的大腦就無法成為壹個通用的設計思路。

API文本瀏覽器[返回]

很多API函數都很長。想看看它長什麽樣嗎?下面以API DdeClientTransaction函數為例:

聲明函數DdeClientTransaction Lib“user 32”(pData為Byte,ByVal cbData為Long,ByVal hConv為Long,ByVal hszItem為Long,ByVal wFmt為Long,ByVal wType為Long,ByVal dwTimeout為Long,pdwResult為Long)為Long

哇!這麽久?如果妳從來沒有接觸過API,我想妳壹定很害怕。妳可以考慮妳是否應該繼續學習。但是不用擔心。幸運的是,微軟的設計師們為我們提供了壹個有用的工具,那就是API。

文本查看器。

通過API文本查看器,我們可以很容易地找到程序需要的函數聲明、結構類型和常量,然後復制到剪貼板,最後粘貼到VB程序的代碼段中。在大多數情況下,只要我們確定了程序需要的函數、結構和常量,就可以通過API文本瀏覽器的上述操作,將它們添加到程序段中,使這些函數可以在程序中使用。這些都是學習API最基本的常識性問題,和API龐大的系統內容相差甚遠。未來我們會把精力浪費在哪裏(這絕不是浪費)?那就是:

什麽時候用什麽函數,什麽時候用什麽結構類型,什麽時候用什麽常量。

API函數聲明

讓我們回想壹下。如何在VB中聲明函數?我想如果妳正在看這篇文章,那麽妳壹定可以回答這個問題。以下是您應該熟悉的函數聲明:

函數SetFocus (ByVal hwnd壹樣長)壹樣長

也就是說,這行代碼定義了壹個名為SetFocus的函數,它有壹個長數據類型的參數,並按值傳遞(ByVal)。函數執行後,會返回壹個長數據。

API函數的聲明也很相似。例如,API中的SetFocus函數是這樣寫的:

將函數SetFocus Lib“user 32”別名“SetFocus”(ByVal hwnd As Long)聲明為Long

有點復雜。是的,有點復雜。但是我可以告訴妳,除了這些多余的部分,其他部分還是和妳之前學的壹樣。在程序中調用函數也是如此。比如:

Dim dl As Long

dl & amp=SetFoucs(Form1。Hwnd)

然而,有壹點是清楚的。不像自己寫的程序,也不像VB。

和它自己的函數壹樣,它的用法可以在VB的在線幫助中找到。唯壹的辦法就是學習和查閱VB以外的資料。

Declare語句用於在模塊級聲明對動態鏈接庫(DLL)中外部過程的引用。對此,妳只需要記住,任何API函數聲明都必須寫這條語句。

Iib表示包含聲明的過程或函數的動態鏈接庫或代碼資源。換句話說,它解釋了函數或過程來自哪裏的問題。

如上例所示,SetFocus庫“user32”表明函數SetFocus來自user32.dll文件。主要的dll動態鏈接庫文件有:

User32.dll視窗管理。生成和管理應用程序的用戶界面。

GDI32.dll圖形設備接口。生成Windows設備的圖形輸出。

Kernel32.dll系統服務。訪問操作系統的計算機資源。

請註意,當DLL文件不在Windows或系統文件夾中時,必須在函數(

路徑)。例如,SetFocus Lib "c:\Mydll\user32 "

函數聲明中的別名是可選的。指示要調用的過程在動態鏈接庫(DLL)中有另壹個名稱(別名)。例如,別名“SetFocus”意味著SetFocus函數在User32.dll的另壹個名稱是,

SetFocus .為什麽兩個名字壹樣?當然也可以不壹樣。很多情況下,alias所描述的函數名,也就是Alias的最後壹個字符,往往是字符a,比如SetWindowsText函數的另壹個名字是

SetWindowsTextA,表示為別名“SetWindowsTextA”。這個A只是設計者慣用的命名約定,表示該函數屬於ANSI版本。

那麽,別名有什麽用呢?理論上,別名提供了壹個函數方法,用於調用另壹個別名的API。如果指定了別名,那麽雖然我們在Declare語句之後根據函數調用函數,但是在函數的實際調用中別名是首選。例如,下面兩個函數(ABCD)聲明是有效的,它們調用同壹個SetFocus函數:

將函數SetFocus Lib " user 32 " " SetFocus "(ByVal hwnd As Long)聲明為Long

將ABCD SetFocus庫“user32”別名“SetFocus”(ByVal hwnd As Long)聲明為Long

需要註意的是,選擇別名時,要註意別名的大小寫;如果未選擇Alias,則函數名必須區分大小寫,並且不能更改。當然,很多情況下,因為函數聲明是直接來自API的。

文本瀏覽器,所以這種錯誤很少,但是妳有必要知道這壹點。

最後,我想提醒您,API聲明(包括結構和常量)必須放在表單或模塊的“通用聲明”部分。

數據類型和“類型安全”

API函數中使用的數據類型和VB中的基本相同。但是作為WIN32的API函數,沒有整數。

數據類型。還有壹點就是布爾數據類型在API函數中是不可見的。在API函數中,變量數據類型顯示為Any,例如Data As Any。雖然它的意思是允許任何參數類型作為API函數的參數傳遞,但是這樣做有壹些缺點。原因是這將導致對目標參數的所有類型的檢查都被關閉。這自然會給各種類型的參數調用帶來錯誤。

為了實施嚴格的類型檢查並避免上述問題,壹種方法是在函數中使用上述別名技術。例如,API函數GetDIBits可以用另壹種方式聲明。如下所示:

GetDIBits函數的原型:

公共聲明函數GetDIBits Lib“GDI 32”別名“GetDIBits”(ByVal aHDC為Long、ByVal hBitmap為Long、ByVal nStartScan為Long、ByVal nNumScans為Long、lpBits為Any、lpBI為BITMAPINFO、ByVal wUsage為Long)

GetDIBits函數的修改:

公共聲明函數GetDIBitsLong Lib "gdi32 "別名" GetDIBits" (ByVal aHDC為Long、ByVal hBitmap為Long、ByVal nStartScan為Long、ByVal nNumScans為Long、lpBits為Long、lpBI為BITMAPINFO、ByVal wUsage為Long)為Long

通過本課程前面所學的知識,我們已經可以知道,無論是原型GetDIBits函數還是修改後的GetDIBitsLong函數,實際上都會調用Alias指定的原GetDIBits函數。但妳應該看到,兩者的區別在於,我們在修改後的函數中強制lpBits參數為Long。這將最小化函數調用中的錯誤概率。這種方法稱為“安全類型”聲明。

  • 上一篇:用135編輯器,手機上如何排版微信公眾號?
  • 下一篇:ueditor1.4.3阻止過濾span標簽
  • copyright 2024編程學習大全網