Newsgroup: it.comp.lang.visual-basic
Titolo: Registrare dll e ocx da programma

Salve a tutti,
devo realizzare un programmino che registra una serie di dll e ocx dati, il
problema (grosso :-( ) è che non so proprio da dove partire. Ho provato a
cercare un po' in rete e DllRegisterServer sembrava fare al caso mio, ma con il
visualizzatore API non riesco a vederla (nè con Apiload.txt, nè con Mapi32.txt
e nè con Win32api.txt), il che mi ha fatto pensare che forse ero sulla via
sbagliata.
Qual è la strada giusta?
Thanks,
Nicola.
-- 
Posted from  [194.243.32.28] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG


DllRegisterServer NON e' parte dell'API di windows.
Si tratta di una funzione esportata dalle ActiveX DLL e dagli OCX, che
consente appunto di fare in modo che la libreria si AUTOREGISTRI.
Nessuno puo' registrare un componente, poiche' e' IMPOSSIBILE conoscerne la
struttura da fuori, si puo' solo chiedere alla DLL di autoregistrarsi,
chiamando appunto questa funzione.
Purtroppo VB non supporta le chiamate a funzione indirette, cioe' una
variabile definita come puntatore a funzione che puo' essere chiamata cosi'
come avverrebbe per la funzione stessa, percui e' necessario usare C oppure
un trucco (cioe' una funzione dell'API di Win che a sua volta chiami questa
funzione, ma non e' il procedimento consigliato).
Il modo piu' semplice di registrare un componente e' cmq sempre chiamare
regsvr32.exe passandogli il path completo del componente; in modalita' /S,
cioe' silenziosa, non viene generata nessuna msgbox, altrimenti per ogni
esecuzione apparira' una message box che indichera' il successo o il
fallimento della registrazione.
Ciaotutti,
*

 *
-- 
Posted from  [194.243.32.19] 


> Qual è la strada giusta?
due soluzioni tratte entrambe da API Guide (
www.allapi.net
)
con chiamata diretta:
Declare Function DllRegisterServer Lib "ComCtl32.OCX" () As Long
Declare Function DllUnregisterServer Lib "ComCtl32.OCX" () As Long
...
If DllRegisterServer = 0 Then MsgBox "Registrata"
altrimenti... puoi usare chiamata "indiretta".. segue il codice in fondo al
messaggio.
ciao
--
Fibia "Sakamoto" FBI
E-mail: 
fibi...@hotmail.com
ICQ UIN 63586057
Sito Personale: 
http://www.geocities.com/fibiafbi
VB Simple: 
http://vbsimple.virtualave.net
Membro #26 delle Mitiche Brigate Takahashi sezione Sud
Register Server (2)
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As
Long) 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 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
Private Sub Form_Load()
Text1.Text = "C:\WINDOWS\SYSTEM\COMCTL32.OCX"
Command1.Caption = "Register server"
Command2.Caption = "Unregister server"
End Sub
Private Sub Command1_Click()
Call RegisterServer(Me.hWnd, Text1.Text, True)
End Sub
Private Sub Command2_Click()
Call RegisterServer(Me.hWnd, Text1.Text, False)
End Sub
Public Function RegisterServer(hWnd As Long, DllServerPath As String,
bRegister As Boolean)
On Error Resume Next
'KPD-Team 2000
'URL: 
http://www.allapi.net/
'E-Mail: KPD...@Allapi.net
'We're going to call an API-function, without declaring it!
' Modified by G. Kleijer
' 
gkle...@casema.net
' going to call the DllRegisterServer/DllUnRegisterServer API of the
specified library.
' there's no need to use the Regsvr32.exe anymore.
' Make sure the path is correct and that the file exists, otherwise VB will
crash.
Dim lb As Long, pa As Long
lb = LoadLibrary(DllServerPath)
If bRegister Then
pa = GetProcAddress(lb, "DllRegisterServer")
Else
pa = GetProcAddress(lb, "DllUnregisterServer")
End If
If CallWindowProc(pa, hWnd, ByVal 0&, ByVal 0&, ByVal 0&) = ERROR_SUCCESS
Then
MsgBox IIf(bRegister = True, "Registration", "Unregistration") + "
Successful"
Else
MsgBox IIf(bRegister = True, "Registration", "Unregistration") + "
Unsuccessful"
End If
'unmap the library's address
FreeLibrary lb
End Function