会崩溃
具体说说,怎样使用会崩溃 很好的资料,好好学习 用汇编创建一个MESSAGETIMEOUT对话框,晚个几百毫秒再退出这样其他进程都退成功了,再自动关闭这个对话框, VB6 进程就不会崩了 本帖最后由 逍遥爱迪生 于 2025-5-28 15:04 编辑
用汇编创建一个MESSAGETIMEOUT对话框,晚个几百毫秒再退出这样其他进程都退成功了,再自动关闭这个对话框, VB6 IDE 进程就不会崩了
Unloadexe
Public Sub UnloadDll()
Dim asm As New clsASM, t As Long
With asm
.Push 1
.Push StrPtr("提示")
.Push StrPtr("你确定要卸载模块?")
.Push 0
.Mov_EAX GetProcAddress(动态链接库的模块句柄("User32.dll"), "MessageBoxW")
.Call_EAX
.Cmp_EAX 2
.JE "1E"
.Push 0
.Mov_EAX 过程内存地址(AddressOf 落叶的忧伤)
.Call_EAX
.Cmp_EAX 0
.JE "0E"
.Push_EAX
.Mov_EAX GetProcAddress(动态链接库的模块句柄("kernel32"), "FreeLibrary")
.Call_EAX
.Cmp_EAX 0
.JE "1D"
.Ret
.Push 0
.Push StrPtr("提示")
.Push StrPtr("获取DLL句柄失败,DLL卸载失败!")
.Push 0
.Mov_EAX GetProcAddress(动态链接库的模块句柄("User32.dll"), "MessageBoxW")
.Call_EAX
.Ret
.Push 0
.Push StrPtr("提示")
.Push StrPtr("DLL卸载失败!")
.Push 0
.Mov_EAX GetProcAddress(动态链接库的模块句柄("User32.dll"), "MessageBoxW")
.Call_EAX
.Ret
End With
t = asm.Run_ASM
CreateRemoteThread -1, 0, 0, t, 0, 0, 0 '远程创建线程
End Sub
Public Function 落叶的忧伤(ByVal 参数 As Long) As Long
Select Case 参数
Case 0 '关闭窗口 返回自身DLL句柄
If 落叶的忧伤 = 0 Then 落叶的忧伤 = App.hInstance
If 落叶的忧伤 = 0 Then MessageBox 0, "DLL为0", "卸载", 0
Case 2
MessageBox 0, "模块卸载失败!", "卸载", 0
Case Else
参数 = 参数
End Select
End Function
页:
1
[2]