Dllregister (un vrai register/unregister d'ocx, sans regsvr32)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 814 fois - Téléchargée 47 fois

Contenu du snippet

Ouhais, moi, j'en ai marre des code dégeus qui explique comment, pour la xème fois, enregistrer un OCX avec regsvr32... Bien crade, quoi.

Alors voici comment enregistrer en interne, dynamiquement, un composants ActiveX en utilisant les API.

Principe : Les ActiveX possèdent tous deux méthodes qui s'appellent 'DLLRegisterServer' et 'DLLUnRegisterServer' ; REGSVR32 ne fait rien d'autres que les appeller suivant le cas...

Source / Exemple :


Option Explicit

' #####################################################################################
' # Reg auto d'un ActiveX
' # Peut être utile pour un plug in
' #####################################################################################

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

Public Function RegisterServer(ByVal Prm_L_hWnd As Long, ByVal Prm_S_DllServerPath As String, byval Prm_B_Register As Boolean) as boolean

    On Error Goto RegisterServer_Err

    Dim L_Lib As Long
    Dim L_ProcAdress As Long
    
    L_Lib = LoadLibrary(Prm_S_DllServerPath)

    If Prm_B_Register Then
        L_ProcAdress = GetProcAddress(L_Lib, "DllRegisterServer")
    Else
        L_ProcAdress = GetProcAddress(L_Lib, "DllUnregisterServer")
    End If

    If CallWindowProc(L_ProcAdress, Prm_L_hWnd, ByVal 0&, ByVal 0&, ByVal 0&) = ERROR_SUCCESS Then
        RegisterServer = True
    Else
        RegisterServer = False
    End If

    Call FreeLibrary(L_Lib)
    
    Exit Function

RegisterServer_Err:

    Call MsgBox("Erreur numéro : " & Err.Number & vbCrLf & "Description : " & Err.Description)

End Function

Conclusion :


Voila... Donc, pour l'utiliser :

Call RegisterServer(Form1.hWnd, "COMCTL32.OCX", True) ' False pour Unregister

A voir également

Ajouter un commentaire

Commentaires

zen69
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1 -
Et aussi a quoi ca sert le premier parametre (window.hwnd) ... ?
zen69
Messages postés
584
Date d'inscription
jeudi 28 décembre 2006
Statut
Membre
Dernière intervention
29 avril 2010
1 -
C'est bien beau tout ca... mais ca me retourne true meme si le composant n'est pas correctement enregistrer... tu as une idee pourquoi ?
kakenette
Messages postés
218
Date d'inscription
dimanche 1 mai 2005
Statut
Membre
Dernière intervention
15 novembre 2009
1 -
Dommage que mes antivirus et anti-spywares detect l'enregistrement et le classe parmis un badware :/
FLYeRNeT
Messages postés
27
Date d'inscription
mardi 21 novembre 2000
Statut
Membre
Dernière intervention
17 novembre 2007
-
Sympa cette source, mais ce que je recherche c'est à enregistrer un ocx ou une dll avec mon programme que si ça n'a pas été fait précédemment.
Sur quelle clef du registre se baser pour ne lancer le regsvr32 que si l'activeX n'est pas déjà enregistré sur le systeme ?
cs_cyrilp
Messages postés
140
Date d'inscription
mercredi 4 octobre 2000
Statut
Membre
Dernière intervention
12 août 2009
-
Y'a longtemps que j'etais pas passé sur cette code et....
juste un petit mot à FredJust... Tu dis que tes OCX s'enregistrent tout seul ???

Alors pourquoi dans ton site tu explique comment utiliser RegSvr32 ???
As tu compris l'interet de cette source au moins ?

A+
Cyril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.