主頁 > 軟體工程 > ActiveXDLL免注冊呼叫的方法,如何得到IID名稱

ActiveXDLL免注冊呼叫的方法,如何得到IID名稱

2020-09-15 01:44:30 軟體工程

CreateObject("Vbscript.Regexp")
這個參考的類路徑是:TypeLibInfoFromFile("*\vbscript.dll\3")
LoadObjectByID這里又要用完整的路徑:vbscript.dll
這里是一個難點
IIDName = "_" & Trim(ClsName)
這里前面是加"I",實際上是用“IRegexp"
一會用"_Regexp",一會用"IRegexp",真不知什么規律。


Dim pDll As Long '記錄Dll,用來最后完美釋放
Dim Update As Update.Handle '要實體化的物件
Set Update = LoadObjectByName(App.Path & "\Update.dll", "Handle", pDll) ' New Update.Handle
If Update Is Nothing Then Exit Sub
Update.Test '<--類中的方法
Set Update = Nothing '<-----這句不能少,否則會出現意外錯誤
UnLoadDll pDll '<----釋放

模塊中:
Option Explicit
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryW" (ByVal lpLibFileName As Long) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function CallAsmCode Lib "user32" Alias "CallWindowProcW" (FirstAsmCode As Long, ByVal pA As Long, ByVal pB As Long, ByVal pC As Long, lpD As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private AsmCode(94) As Long

Public Function LoadObjectByName(ByVal DllPath As String, ByVal ClsName As String, pDll As Long) As Object
    Dim pObj As Long, TLIAPP As Object, TLI As Object
    Dim CLSID As String, IID As String, IIDName As String

    On Error GoTo Err

    Set TLIAPP = CreateObject("TLI.TLIApplication")
    Set TLI = TLIAPP.TypeLibInfoFromFile(DllPath)

    IIDName = "_" & Trim(ClsName)

    CLSID = TLI.GetTypeInfo(Trim(ClsName)).GUID
    IID = TLI.GetTypeInfo(Trim(IIDName)).GUID

    Set LoadObjectByName = LoadObjectByID(DllPath, CLSID, IID, pDll)
    Set TLI = Nothing
Err:
End Function

Public Function LoadObjectByID(ByVal DllPath As String, ByVal CLSID As String, ByVal IID As String, pDll As Long) As Object
    Dim pObj As Long
    Call InitAsmCode
    pObj = CallAsmCode(AsmCode(20), StrPtr(DllPath), StrPtr(CLSID), StrPtr(IID), pDll)
    CopyMemory LoadObjectByID, pObj&, 4&
End Function

Public Function UnLoadDll(pDll As Long) As Long
    Call InitAsmCode
    UnLoadDll = CallAsmCode(AsmCode(79), pDll, 0, 0, 0)
End Function

Private Sub InitAsmCode()
    If AsmCode(4) Then Exit Sub
    Dim pDll As Long

    pDll = LoadLibrary(StrPtr("kernel32"))
    AsmCode(0) = GetProcAddress(pDll, "LoadLibraryW")
    AsmCode(1) = GetProcAddress(pDll, "GetProcAddress")
    AsmCode(2) = GetProcAddress(pDll, "FreeLibrary")
    Call FreeLibrary(pDll)

    AsmCode(4) = &H476C6C44
    AsmCode(5) = &H6C437465
    AsmCode(6) = &H4F737361
    AsmCode(7) = &H63656A62
    AsmCode(8) = &H4C430074
    AsmCode(9) = &H46444953
    AsmCode(10) = &H536D6F72
    AsmCode(11) = &H6E697274
    AsmCode(12) = &H10067
    AsmCode(13) = &H0&
    AsmCode(14) = &HC00000
    AsmCode(15) = &H0&
    AsmCode(16) = &H6F4600
    AsmCode(17) = &H65006C
    AsmCode(18) = &H320033
    AsmCode(19) = &H0&
    AsmCode(20) = &H83EC8B55                               '創建物件函式入口
    AsmCode(21) = &HE853D8C4
    AsmCode(22) = &H0&
    AsmCode(23) = &H6CEB815B
    AsmCode(24) = &H8D100010
    AsmCode(25) = &H105293
    AsmCode(26) = &H93FF5210
    AsmCode(27) = &H10001010
    AsmCode(28) = &H32938D50
    AsmCode(29) = &H52100010
    AsmCode(30) = &H1493FF50
    AsmCode(31) = &H8D100010
    AsmCode(32) = &H101C93
    AsmCode(33) = &HFF028910
    AsmCode(34) = &H101893
    AsmCode(35) = &H875FF10
    AsmCode(36) = &H101093FF
    AsmCode(37) = &HC00B1000
    AsmCode(38) = &H86840F
    AsmCode(39) = &H45890000
    AsmCode(40) = &H20938DFC
    AsmCode(41) = &H52100010
    AsmCode(42) = &H1493FF50
    AsmCode(43) = &HB100010
    AsmCode(44) = &H506674C0
    AsmCode(45) = &H52EC558D
    AsmCode(46) = &HFF0C75FF
    AsmCode(47) = &H101C93
    AsmCode(48) = &H558D5810
    AsmCode(49) = &H938D52D8
    AsmCode(50) = &H10001042
    AsmCode(51) = &HEC558D52
    AsmCode(52) = &HBD0FF52
    AsmCode(53) = &H8D3E75C0
    AsmCode(54) = &HFF52DC55
    AsmCode(55) = &H93FF1075
    AsmCode(56) = &H1000101C
    AsmCode(57) = &HD8558B50
    AsmCode(58) = &H8D54128B
    AsmCode(59) = &H6A50DC45
    AsmCode(60) = &HD875FF00
    AsmCode(61) = &HB0C52FF
    AsmCode(62) = &H8B1575C0
    AsmCode(63) = &H4D8BFC45
    AsmCode(64) = &H59018914
    AsmCode(65) = &H8BD18B51
    AsmCode(66) = &H52FF5112
    AsmCode(67) = &H14EB5804
    AsmCode(68) = &HEB06EB58
    AsmCode(69) = &HEB02EB0F
    AsmCode(70) = &HFC75FF0B
    AsmCode(71) = &H101893FF
    AsmCode(72) = &HC0331000
    AsmCode(73) = &H10C2C95B
    AsmCode(74) = &H6C6C4400
    AsmCode(75) = &H556E6143
    AsmCode(76) = &H616F6C6E
    AsmCode(77) = &H776F4E64
    AsmCode(78) = &H0&
    AsmCode(79) = &H53EC8B55                               '嘗試卸載DLL函式入口
    AsmCode(80) = &HE8&
    AsmCode(81) = &HEB815B00
    AsmCode(82) = &H10001155
    AsmCode(83) = &H1139938D
    AsmCode(84) = &HFF521000
    AsmCode(85) = &H93FF0875
    AsmCode(86) = &H10001014
    AsmCode(87) = &H1374C00B
    AsmCode(88) = &HC00BD0FF
    AsmCode(89) = &H75FF0E74
    AsmCode(90) = &H1893FF08
    AsmCode(91) = &H33100010
    AsmCode(92) = &H4801EBC0
    AsmCode(93) = &H10C2C95B
    AsmCode(94) = &H90909000
End Sub

uj5u.com熱心網友回復:

其實 Kernel32.dll 不需要在你的程式代碼中去 LoadLibrary( )。
直接 GetModuleHandle( )就可以了。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/40429.html

標籤:VB基礎類

上一篇:VB編程 讀取檔案 一行一行顯示的問題

下一篇:WIN 10 怎么獲取攝像頭

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more