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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 802 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

Ah Ah! Je vois que tu as des problèmes avec l'enregistrement de tes controles! Sache petit scarabé que j'ai des fonctions natives dans mon soft pour gérer tout ça! Tu n'auras plus jamais besoin d'enregistrer tes composants!!! Je livrerais ce 'secret' quand je serais sur de votre valeur en programmation, afin de vous faciliter la vie si vous stagnez à ce niveau débutant.
Je trouve ce source plus intérressant qu'un quelconque executable même bien fait.....
Au moins on a une chance de progresser mon grand scarabée.
Réponse à yotta : Non, non, je n'ai pas de problème avec l'enregistrement de mes contrôles, je comble simplement une lacune de VB qui ne sais pas enregistrer ses contrôle dynamiquement.
Si tu as des idées pour comment faire un bon plug-in, ça m'intéresse (mail-moi)
je comprends pas comment une source comme ça peut avoir une note de 10 alors que mon soft qui fait ça nativement n'a même pas la moyene. Perso je vote 1 pour te baisser ta note, ça me semble normal.

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.