VB 使用未注册的ActiveX 代码

' (声明:魏滔序原创,转贴请注明出处。)
'
阿国哥的代码(找到链接后再补上),我稍微改良了一下,做绿色软件的朋友肯定用的到。
'
IDE下可以引用那个dll使用。编译后可以在未注册dll的计算机上正常工作了。

' 使用方法:
'
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 LongAs Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As LongByVal lpProcName As StringAs Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As LongAs Long
Private Declare Function CallAsmCode Lib "user32" Alias "CallWindowProcW" (FirstAsmCode As LongByVal pA As LongByVal pB As LongByVal pC As Long, lpD As LongAs Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Private AsmCode(94As Long

Public Function LoadObjectByName(ByVal DllPath As StringByVal ClsName As String, pDll As LongAs 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 StringByVal CLSID As StringByVal IID As String, pDll As LongAs 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 LongAs Long
    
Call InitAsmCode
    UnLoadDll 
= CallAsmCode(AsmCode(79), pDll, 000)
End Function


Private Sub InitAsmCode()
    
If AsmCode(4Then 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


 
Powered by barenx
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用VB模块代码,您需要按照以下步骤进行操作: 1. 打开您想要编写代码VB集成开发环境(IDE),如Visual Studio。 2. 创建一个新的VB项目,或打开现有的项目。 3. 在项目资源管理器中,找到“模块”(Module)选项,并右键单击以创建一个新的模块。 4. 给模块命名,并点击“确定”。 5. 在模块中编写您的VB代码。 模块中的代码可以包含函数、过程、变量和常量,您可以根据需要添加适当的代码逻辑。 6. 在模块中定义和实现您的过程和函数,可以使用VB语言提供的内置函数,或者您自己编写的函数。 7. 在模块中声明和初始化变量,以在代码使用。您可以使用Dim语句声明变量,并使用赋值语句给变量赋初始值。 8. 使用模块中的函数和过程来实现您的需求。您可以通过调用函数和过程来执行特定的操作,并将结果返回或传递给其他部分的代码。 9. 在模块中使用条件语句(如IF-THEN-ELSE、SELECT CASE)和循环语句(如FOR、WHILE)来控制代码执行流程。 10. 调试和测试您的代码VB IDE提供了调试工具,如断点和调试输出窗口,可以帮助您检查代码的执行过程和变量的值。 11. 运行和使用您的VB模块代码。您可以在IDE中直接运行代码,或以可执行文件的形式发布和部署您的应用程序。 希望这些步骤可以帮助您了解如何使用VB模块代码。请注意多阅读VB相关的文档和教程,以便进一步学习和掌握VB编程技巧。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值