Newsgroup: it.comp.lang.visual-basic
Titolo: help per registrare-deregistrare dll da VB

Ciao a tutti
    Ho la necessità di registrare e deregistrare dll tramite codice VB,
l'utente non deve accorgersi di niente, il percorso delle dll in oggetto è
sempre fisso.
ho provato con
shell " regsvr32 " &[path_dll]  & " /u /s"
conWindowx xp funziona, ma con altri sistemi operativi ???
non sono sicuro che regsvr32 venga esegutio senza indicare il suo esatto
percorso, quindi qualcuno può indicarmi se esiste un comando vb che fa
questo o come rivare la variabile del path di regsvr32 in base al sistema
operativo??
grazie a tutti

 ha scritto nel messaggio
news:QQ5C8.1$iN.628@psinet-eu-nl...

non so...
ti posso dire che l'utilizzo dell'istruzione
shell " regsvr32 ....
funziona perfettamente anche su NT4, win2000, win98, win95.... anche i miei
programmi (che girano su queste versioni di win) utilizzano molto regsvr32 e
non hanno problemi... L'unico problema è che x fare la registrazione delle
dll devi avere i permessi di Administrator... (ma questo vale anche su xp
penso)
ciao

sempre fisso.
Con il codice che segue puoi registrare / degistrare
tuttle le dll/ocx activex che vuoi in modo silenzioso.
<codice>
Option Explicit
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 FreeLibrary Lib "kernel32" ( _
                                    ByVal hLibModule As Long _
                                    ) As Long
Private Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" ( _
                                    ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
                                    ByVal Msg As Any, _
                                    ByVal wParam As Any, ByVal lParam As Any _
                                    ) As Long
 
Private Const ERROR_SUCCESS = &H0
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function RegistraActiveX(ByVal a_filename As String, _
                                ByVal a_flagRegister As Boolean _
                                ) As Boolean
    Dim hLib As Long            '// handle alla libreria ActiveX
    Dim hProc As Long           '// handle alla funzione DllRegisterServer
    Dim lpProcName As String    '// nome della funzione esportata dalla dll
 
    '// cerca di caricare l'activeX
    hLib = LoadLibrary(a_filename)
    If (hLib = 0) Then Exit Function
 
    '// verifica se e' un ActiveX registrabile
    If (a_flagRegister) Then
        lpProcName = "DllRegisterServer"
    Else
        lpProcName = "DllUnRegisterServer"
    End If
    hProc = GetProcAddress(hLib, lpProcName)
    If (hProc = 0) Then
        FreeLibrary (hLib)
        Exit Function
    End If
 
    '// "sporco trucco" in vb per chiamare una funzione di cui
    '// si ha l' indirizzo
    RegistraActiveX = (ERROR_SUCCESS = _
                    CallWindowProc(hProc, 0&, 0&, 0&, 0&))
 
    FreeLibrary (hLib)
End Function    '// RegistraActiveX
</codice>
Un esempio di uso dalla finestra immediate:
?RegistraActiveX("C:\WINNT\system32\comdlg32.ocx", true)
True
-- 
hth, hal

il valore di hproc=0
Ho sbagliato a scrivere il nome della funzione di deregistrazione:
La "r" di register va minuscola e non maiuscola, cosi':
lpProcName = "DllUnregisterServer"
-- 
ciao, hal