[AccessD] A2K: Regsvr32 assistance please

Darren DICK d.dick at uws.edu.au
Wed Oct 22 09:55:06 CDT 2003


John
You da man!!!

This is absolutely perfect. This has been an area I have been putting off for so long, you
have made it all so easy.
This list and its inhabitants are way cool.

Many many thanks

Darren

----- Original Message ----- 
From: "John Skolits" <askolits at ot.com>
To: "Access Developers discussion and problem solving" <accessd at databaseadvisors.com>
Sent: Wednesday, October 22, 2003 11:46 PM
Subject: RE: [AccessD] A2K: Regsvr32 assistance please


> 
> You can use the Shell, but I sometimes ran into problems with it.
> This function will actually return a True or False if its registered or not.
> 
> Here's an example on how to use it:
> 
> Register The Control
> call lbf_RegisterOCX("c:\winnt\system32\comdlg32.ocx",true)
> 
> Unregister control
> call lbf_RegisterOCX("c:\winnt\system32\comdlg32.ocx",true)
> 
> 
> 
> Here's the code I use:
> ---------------------------------------------
> 
> 
> 
> Option Compare Database
> Option Explicit
> 
> Private Declare Function LoadLibraryA Lib "kernel32" (ByVal lLibFileName As
> String) As Long
> Private Declare Function CreateThread Lib "kernel32" (lThreadAttributes As
> Any, _
>     ByVal lStackSize As Long, ByVal lStartAddress As Long, ByVal larameter
> As Long, _
>     ByVal lCreationFlags As Long, lThreadID As Long) As Long
> Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle
> As Long, _
>     ByVal lMilliseconds As Long) As Long
> Private Declare Function GetProcAddress Lib "kernel32" (ByVal hModule As
> Long, _
>     ByVal lProcName As String) As Long
> Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA"
> _
>     (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
>     ByVal wParam As Long, ByVal lParam As Long) 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 Long
> Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As
> Long, _
>     lExitCode As Long) As Long
> Private Declare Sub ExitThread Lib "kernel32" (ByVal lExitCode As Long)
> 
> 
> 
> 
> Function lbf_RegisterOCX(ByVal sFilePath As String, _
>     Optional bRegister As Boolean = True) As Boolean
> 
>     Dim lLibAddress As Long, lProcAddress As Long, lThreadID As Long, _
>         lSuccess As Long, lExitCode As Long, lThread As Long
>     Dim sRegister As String
> 
> ''**************************************************************************
> ******
> ''                         Procedure Identification
> ''--------------------------------------------------------------------------
> ------
> ''    Name:         lbf_RegisterOCX
> ''
> ''    Purpose:  This function registers and Unregisters OLE components
> ''
> ''    Results:  Returns True if successful
> ''
> ''    Inputs:   sFilePath - The path to the DLL/OCX or ActiveX EXE
> ''               bRegister - If True Registers the control, else unregisters
> control
> ''
> ''
> ''    Date/Author:   Andrewb 04/09/2000 Loaded into CDD Lib 10/07/03 John
> Skolits
> ''**************************************************************************
> ******
> 
> On Error GoTo lbf_RegisterOCX_ERR
> 
> '*********BEGIN CODE HERE ********
> Const clMaxTimeWait As Long = 20000     'Wait 20 secs for register to
> complete
> 
>     If Len(sFilePath) > 0 And Len(Dir(sFilePath)) > 0 Then
>         'File exists
>         If UCase$(Right$(sFilePath, 3)) = "EXE" Then
>             'Register/Unregister ActiveX EXE
>             If bRegister Then
>                 'Register EXE
>                 Shell sFilePath & " /REGSERVER", vbHide
>             Else
>                 'Unregister ActiveX EXE
>                 Shell sFilePath & " /UNREGSERVER", vbHide
>             End If
>             lbf_RegisterOCX = True
>         Else
>             'Register/Unregister DLL
>             If bRegister Then
>                 sRegister = "DllRegisterServer"
>             Else
>                 sRegister = "DllUnRegisterServer"
>             End If
> 
>             'Load library into current process
>             lLibAddress = LoadLibraryA(sFilePath)
> 
>             If lLibAddress Then
>                 'Get address of the DLL function
>                 lProcAddress = GetProcAddress(lLibAddress, sRegister)
>                 If lProcAddress Then
>                     lThread = CreateThread(ByVal 0&, 0&, _
>                     ByVal lProcAddress, ByVal 0&, 0&, lThread)
>                     If lThread Then
>                         'Created thread and wait for it to terminate
>                         lSuccess = (WaitForSingleObject(lThread,
> clMaxTimeWait) = 0)
>                         If Not lSuccess Then
>                             'Failed to register, close thread
>                             Call GetExitCodeThread(lThread, lExitCode)
>                             Call ExitThread(lExitCode)
>                             lbf_RegisterOCX = False
>                         Else
>                             'Successfully registered component
>                             lbf_RegisterOCX = True
>                             Call CloseHandle(lThread)
>                         End If
>                     End If
>                     Call FreeLibrary(lLibAddress)
>                 Else
>                     'Object doesn't expose OLE interface
>                     Call FreeLibrary(lLibAddress)
>                 End If
>             End If
>         End If
>     End If
>     Exit Function
> 
> lbf_RegisterOCX_EXIT:
> 
> Exit Function
> 
> lbf_RegisterOCX_ERR:                                    'Display the error
> 
> 
>             MsgBox "ERROR CODE:" & Err & "   DESC:" & Error
> 
>             Resume lbf_RegisterOCX_EXIT
> 
> End Function
> 
> 
> 
> 
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com


More information about the AccessD mailing list