|
RegComDll App.Path & "\32_MFCActiveXControl1.ocx"
'reg x64 com dll
RegComDll App.Path & "\64_MFCActiveXControl1.ocx", False
有的电脑管理员权限比较高,就自已写个REGSVR32一样的软件来自动注册,或使用VBS,BAT提权后注册。
最好的方法还是使用免注册加载Activex对象的方法。
64位VBA免注册调用32位COM DLL的问题
https://club.excelhome.net/thread-1662929-1-1.html
’反注册DLL
- <p>
- </p><p>RegComDll App.Path & "\32_MFCActiveXControl1.ocx", , True</p><p> </p><p>Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long</p><p>Private Declare Function GetModuleHandle Lib "kernel32" Alias "GetModuleHandleA" (ByVal lpModuleName As String) As Long</p><p>Private Declare Function GetCurrentProcess Lib "kernel32" () As Long</p><p>Private Declare Function IsWow64Process Lib "kernel32" (ByVal hProc As Long, bWow64Process As Boolean) As Long</p><p> </p><p>Private Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" ( _</p><p> ByVal hWnd As Long, _</p><p> ByVal lpOperation As String, _</p><p> ByVal lpFile As String, _</p><p> ByVal lpParameters As String, _</p><p> ByVal lpDirectory As String, _</p><p> ByVal nShowCmd As Long) As Long</p><p> </p><p>Const SW_SHOWNORMAL = 1</p><p> </p><p> </p><p>Public Function Is64bit() As Boolean</p><p> Dim handle As Long, bolFunc As Boolean</p><p> bolFunc = False</p><p> handle = GetProcAddress(GetModuleHandle("kernel32"), "IsWow64Process")</p><p> If handle > 0 Then</p><p> IsWow64Process GetCurrentProcess(), bolFunc</p><p> End If</p><p> Is64bit = bolFunc</p><p>End Function</p><p> </p><p> </p><p>Function RegComDll(DllFile As String, Optional For32Bit As Boolean = True, Optional UnRegComDLL As Boolean)</p><p> ShellExecute 0, "runas", "C:\Windows" & IIf(Is64bit And For32Bit, "SysWOW64", "system32") & "\regsvr32.exe", Chr(34) & DllFile & Chr(34) & IIf(UnRegComDLL, " /U", ""), vbNullString, SW_SHOWNORMAL</p><p>End Function</p><p> </p><p> </p><p>Function RegsvrComDll(DllFile As String, Optional For32BitDll As Boolean = True, Optional UnRegComDLL As Boolean)</p><p> Dim Path1 As String</p><p> Path1 = "system32"</p><p> If Is64bit And For32BitDll Then Path1 = "SysWOW64"</p><p> ShellExecute 0, "runas", "C:\Windows" & Path1 & "\regsvr32.exe", Chr(34) & DllFile & Chr(34) & IIf(UnRegComDLL, " /U", ""), vbNullString, SW_SHOWNORMAL</p><p>End Function</p><p></p>
复制代码
|
|