91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

VB.NET如何聲明API

發布時間:2021-12-02 09:46:31 來源:億速云 閱讀:271 作者:小新 欄目:編程語言

這篇文章主要介紹了VB.NET如何聲明API,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

我們都知道在VB6里面可以用API函數來進行子類化,以處理自身的窗體過程;如果跨進程,這就麻煩了,由于我們的函數在我們的進程中(廢話),而目標進程的窗口的消息處理函數在目標進程(還是廢話),所以只能想辦法把我們的代碼放到對方進程中去執行——并且要告知我們的進程得到了什么消息。恐怕寫匯編就有點嚇人了,于是大家都寫DLL,其原理就是把回調函數放到一個DLL里面注入到對方進程,DLL去修改目標窗口的默認處理函數——把消息發送給我們。

當然也有“另類”一點的:http://www.it-berater.org/ThueDownloads/index.shtml上面有一個 DLL包,其中含有一個dssubcls.dll,用它,可以輕松的完成我們的工作:就像調用一個API一樣簡單,而且在我們的程序中使用回調函數!呵呵,省去了自己寫DLL的麻煩之后,這些好處足以吸引各位觀眾了吧?

好了,VB6的代碼大家可以在下載的壓縮包中找到,作者提供了一個以記事本為基礎的實例(在\dssubcls目錄下),非常詳細無需詳細敘述了。關鍵是在VB.NET里面如何使用它——如何聲明API,如何進行回調,看用來子類化的API的VB6聲明先:

Declare Function SubClass& Lib "dssubcls" (ByVal HwndSubclass&, _  Optional ByVal Address& = 0, _  Optional ByVal OldStyle& = 0, _  Optional ByVal NewStyle& = 0, _  Optional ByVal Ext& = 0, _  Optional ByVal SubClass& = 0)

轉化成VB.NET聲明API類似下面的樣子(習慣使然,我把&展開成了As Integer):

Declare Function SubClass Lib "dssubcls" (ByVal HwndSubclass As Integer,   Optional ByVal Address As Integer = 0, Optional ByVal OldStyle As Integer = 0,   Optional ByVal NewStyle As Integer = 0, Optional ByVal Ext As Integer = 0,   Optional ByVal SubClass As Integer = 0) As Integer

這不是很好嘛?問題來了,這樣的聲明在VB6里面可以使用Addressof function來傳入第二個參數(參見你下載的源碼),但是在VB.NET里面直接Addressof就不成了——我們需要委托一個回調:

  1. Private Delegate Function HookCallBack(ByVal wMsg As Integer, 
    ByVal wParam As Integer, ByVal lParam As Integer) As Integer 

這個委托,對應的是以下函數:

  1. Private Function mCallback(ByVal wMsg As Integer, 
    ByVal wParam As Integer, ByVal lParam As Integer) As Integer  

  2. ‘在這里處理得到的消息  

  3. End Function 

使用時,需要注意先實例化這個委托:

Private fix_COCD = New HookCallBack(AddressOf mCallback)

此時,fix_COCD就是我們的mCallback函數引用了,用更直觀的觀點來看,fix_COCD就是一個指向mCallback的指針,相當于 VB6里面的Addressof function得到的結果,看似問題解決了,于是我們寫了以下代碼來搞對方的進程窗體消息:

SubClass(Handle, fix_COCD, 0, 0, 0, 1) '修改處理函數

問題真是接踵而至!IDE提示變量類型不符!!事實確實如此,我們把一個HookCallBack類型當做Integer來傳遞,無法通過檢查,那么強行轉換吧?當然,你可以去試試。這時,我所做的是,修改這個API聲明:

  1. Private Declare Function SubClass Lib "dssubcls" (ByVal HwndSubclass As Integer, 
    Optional ByVal Address As HookCallBack = Nothing, Optional ByVal OldStyle As Integer = 0
    Optional ByVal NewStyle As Integer = 0, Optional ByVal Ext As Integer = 0
    Optional ByVal SubClass As Integer = 0) As Integet 

感謝你能夠認真閱讀完這篇文章,希望小編分享的“VB.NET如何聲明API”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

景泰县| 邳州市| 遂平县| 张家口市| 万载县| 丹江口市| 盈江县| 尼玛县| 龙海市| 保亭| 洛隆县| 汝阳县| 蕲春县| 锦州市| 贡嘎县| 松阳县| 江达县| 布尔津县| 万盛区| 三江| 蕉岭县| 台湾省| 界首市| 临澧县| 淄博市| 马尔康县| 青海省| 苍山县| 益阳市| 武陟县| 永仁县| 万源市| 柳州市| 长泰县| 连城县| 墨江| 乌鲁木齐市| 刚察县| 鄂州市| 云霄县| 台中市|