Option Explicit
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
ByVal lpProcName As String) As Long
Private Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, _
ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lParameter As Long, _
ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, _
lpExitCode As Long) As Long
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongDim mresult
Dim Reg As String, Success As Boolean
Public Sub RegUnReg(ByVal inFileSpec As String, Optional inHandle As String = "")
On Error Resume Next
Dim lLib As Long ' Store handle of the control library
Dim lpDLLEntryPoint As Long ' Store the address of function called
Dim lpThreadID As Long ' Pointer that receives the thread identifier
Dim lpExitCode As Long ' Exit code of GetExitCodeThread
Dim mThread
' Load the control DLL, i. e. map the specified DLL file into the
' address space of the calling process
lLib = LoadLibrary(inFileSpec)
If lLib = 0 Then
' e.g. file not exists or not a valid DLL file
MsgBox "Failure loading control DLL"
Exit Sub
End If
' Find and store the DLL entry point, i.e. obtain the address of the
' 揇llRegisterServer?or "DllUnregisterServer" function (to register
' or deregister the server抯 components in the registry).
'
If inHandle = "" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllRegisterServer")
ElseIf inHandle = "U" Or inHandle = "u" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllUnregisterServer")
Else
MsgBox "Unknown command handle"
Exit Sub
End If
If lpDLLEntryPoint = vbNull Or lpDLLEntryPoint = 0 Then
GoTo earlyExit1
End If
Screen.MousePointer = vbHourglass
' Create a thread to execute within the virtual address space of the calling process
mThread = CreateThread(ByVal 0, 0, ByVal lpDLLEntryPoint, ByVal 0, 0, lpThreadID)
If mThread = 0 Then
GoTo earlyExit1
End If
' Use WaitForSingleObject to check the return state (i) when the specified object
' is in the signaled state or (ii) when the time-out interval elapses. This
' function can be used to test Process and Thread.
mresult = WaitForSingleObject(mThread, 10000)
If mresult <> 0 Then
GoTo earlyExit2
End If
' We don't call the dangerous TerminateThread(); after the last handle
' to an object is closed, the object is removed from the system.
CloseHandle mThread
FreeLibrary lLib
Screen.MousePointer = vbDefault
Success = True
Exit Sub
earlyExit1:
Screen.MousePointer = vbDefault
MsgBox "Registration failed in obtaining entry point or creating thread for " & inFileSpec & ".", vbCritical, "Registration Failed!"
' Decrements the reference count of loaded DLL module before leaving
FreeLibrary lLib
Success = False
Exit Sub
earlyExit2:
Success = False
Screen.MousePointer = vbDefault
MsgBox "Registration failed in signaled state or time-out for " & inFileSpec & ".", vbCritical, "Registration Failed!"
FreeLibrary lLib
' Terminate the thread to free up resources that are used by the thread
' NB Calling ExitThread for an application's primary thread will cause
' the application to terminate
lpExitCode = GetExitCodeThread(mThread, lpExitCode)
ExitThread lpExitCode
End Sub例子
RegUnReg DLL文件名 (注册)
RegUnReg DLL文件名,"U" (反注册)
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As Any, ByVal lpWindowName As Any) As Long
Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" _
(ByVal lpLibFileName As String) As Long
Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, _
ByVal lpProcName As String) As Long
Private Declare Function CreateThread Lib "kernel32" (lpThreadAttributes As Any, _
ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lParameter As Long, _
ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, _
ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, _
lpExitCode As Long) As Long
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongDim mresult
Dim Reg As String, Success As Boolean
Public Sub RegUnReg(ByVal inFileSpec As String, Optional inHandle As String = "")
On Error Resume Next
Dim lLib As Long ' Store handle of the control library
Dim lpDLLEntryPoint As Long ' Store the address of function called
Dim lpThreadID As Long ' Pointer that receives the thread identifier
Dim lpExitCode As Long ' Exit code of GetExitCodeThread
Dim mThread
' Load the control DLL, i. e. map the specified DLL file into the
' address space of the calling process
lLib = LoadLibrary(inFileSpec)
If lLib = 0 Then
' e.g. file not exists or not a valid DLL file
MsgBox "Failure loading control DLL"
Exit Sub
End If
' Find and store the DLL entry point, i.e. obtain the address of the
' 揇llRegisterServer?or "DllUnregisterServer" function (to register
' or deregister the server抯 components in the registry).
'
If inHandle = "" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllRegisterServer")
ElseIf inHandle = "U" Or inHandle = "u" Then
lpDLLEntryPoint = GetProcAddress(lLib, "DllUnregisterServer")
Else
MsgBox "Unknown command handle"
Exit Sub
End If
If lpDLLEntryPoint = vbNull Or lpDLLEntryPoint = 0 Then
GoTo earlyExit1
End If
Screen.MousePointer = vbHourglass
' Create a thread to execute within the virtual address space of the calling process
mThread = CreateThread(ByVal 0, 0, ByVal lpDLLEntryPoint, ByVal 0, 0, lpThreadID)
If mThread = 0 Then
GoTo earlyExit1
End If
' Use WaitForSingleObject to check the return state (i) when the specified object
' is in the signaled state or (ii) when the time-out interval elapses. This
' function can be used to test Process and Thread.
mresult = WaitForSingleObject(mThread, 10000)
If mresult <> 0 Then
GoTo earlyExit2
End If
' We don't call the dangerous TerminateThread(); after the last handle
' to an object is closed, the object is removed from the system.
CloseHandle mThread
FreeLibrary lLib
Screen.MousePointer = vbDefault
Success = True
Exit Sub
earlyExit1:
Screen.MousePointer = vbDefault
MsgBox "Registration failed in obtaining entry point or creating thread for " & inFileSpec & ".", vbCritical, "Registration Failed!"
' Decrements the reference count of loaded DLL module before leaving
FreeLibrary lLib
Success = False
Exit Sub
earlyExit2:
Success = False
Screen.MousePointer = vbDefault
MsgBox "Registration failed in signaled state or time-out for " & inFileSpec & ".", vbCritical, "Registration Failed!"
FreeLibrary lLib
' Terminate the thread to free up resources that are used by the thread
' NB Calling ExitThread for an application's primary thread will cause
' the application to terminate
lpExitCode = GetExitCodeThread(mThread, lpExitCode)
ExitThread lpExitCode
End Sub例子
RegUnReg DLL文件名 (注册)
RegUnReg DLL文件名,"U" (反注册)
解决方案 »
- VB.NET中如何将窗口定位在右下角
- xml的问题
- 求:单片机仿真程序的源代码,或者电路绘图程序的源代码
- 100分求CPU,内存,硬盘性能的正常范围。
- 当我要用代码来移动鼠标时,怎样才能保证在代码未完成相关动作时,不让用户移动鼠标?
- 菜鸟求助,关于编译原理的一个问题
- 哪位有opengl方面的资料借我看看
- [请教DX]在VB中怎样处理WM_MOVE这个"窗口移动"消息?
- 如何检测一个文件夹是否存在,然后得到它的全路径
- 请问:OUTLOOK中的dtpicker(calender???)控件是系统自带的吗?
- crystl32.ocx 请问这是一个什么控件?哪里有得下载?
- 在vb中怎么 限定 字符?急急!!
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q173407HOWTO: Programmatically Register and Unregister .OCX Files (Q173091)
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q173091
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q173407HOWTO: Programmatically Register and Unregister .OCX Files (Q173091)
http://support.microsoft.com/default.aspx?scid=kb;en-us;Q173091
运行regsvr32 ***.dll 2000下把dll copy到system32目录下
运行regsvr32 ***.dll我试过,可以的!
i = Shell("regsvr32.exe C:\windows\system\MyNewTest.dll")
if i=0 then '注册不成功endif
Private Declare Function DllRegisterServer Lib "ComCtl32.OCX" () As Long
Private Declare Function DllUnregisterServer Lib "ComCtl32.OCX" () As Long
'注意:可以用任意的OCX或DLL来替换声明中的ComCtl32.ocxConst ERROR_SUCCESS = &H0Private Sub Command1_Click()If DllRegisterServer = ERROR_SUCCESS Then
MsgBox "注册成功"
Else
MsgBox "注册失败"
End If
End SubPrivate Sub Command1_Click()If DllUnregisterServer = ERROR_SUCCESS Then
MsgBox "反注册成功"
Else
MsgBox "反注册失败"
End IfEnd Sub
REGEDIT4
[HKEY_CLASSES_ROOT\.ocx]
@="ocxfile"
[HKEY_CLASSES_ROOT\ocxfile]
@=”OCX”
[HKEY_CLASSES_ROOT\ocxfile\shell\Register\command]
@="RegSvr32 \"%1\""
[HKEY_CLASSES_ROOT\ocxfile\shell\Unregister\command]
@="RegSvr32 /u \"%1\""
REGEDIT4
[HKEY_CLASSES_ROOT\.dll]
@="dllfile"
[HKEY_CLASSES_ROOT\dllfile]
@=”DLL”
[HKEY_CLASSES_ROOT\dllfile\shell\Register\command]
@="RegSvr32 \"%1\""
[HKEY_CLASSES_ROOT\dllfile\shell\Unregister\command]
@="RegSvr32 /u \"%1\""
你可以试试将该dll文件直接拷入windows\system的目录中,看看能不能使用。