ACTIVEX REGISTRATION

cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 - 18 août 2006 à 12:58
cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 - 23 août 2006 à 01:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39170-activex-registration

cs_Warning Messages postés 516 Date d'inscription samedi 3 février 2001 Statut Membre Dernière intervention 24 octobre 2006 2
23 août 2006 à 01:06
Hello, pourquoi ne pas utiliser les APIs
Declare Function DllRegisterServer Lib "activex.OCX" () As Long
Declare Function DllUnregisterServer Lib "activex.OCX" () As Long

??
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
19 août 2006 à 16:03
vbPink > Avec toutes ces lignes de codes, c'est toi qui gère le processus en entier sans devoir passer par une façon de faire dont on est dépendant.
L'intêret principal est de pouvoir gérer les codes de retour.
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
19 août 2006 à 15:23
vbPink > a mon avis ça fait la meme chose, mais la tu as le code, tu vois comment ça marche et tu n'es dépendant de rien... Et puis avec Shell, si l'ordi rame on sait jamais, si ça se trouve le composant sera enregistré un poil en retard et donc si ton programme veut le charger directement à la suite du Shell, ça peut peut etre créer une erreur... Enfin je ne sais pas trop il faut voir avec ceux qui connaissent, mais la au moins je pense que tu es sur que la procédure d'enregistrement est terminée avant de passer à la suite du programme.
vbPink Messages postés 23 Date d'inscription mardi 8 août 2006 Statut Membre Dernière intervention 30 août 2006
19 août 2006 à 15:18
Quelle est la différence entre utiliser toutes ces lignes de codes et la commande Shell ...?
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
19 août 2006 à 13:50
Renfield > j'avais trouvé une fonction de ce genre dans un de tes codes, je sais plus lequel je crois que c'était un truc de dll, et elle marche très bien et est très compacte. En tout cas je l'utilise dans un prog et aucun problème...
Neo.balastik Messages postés 796 Date d'inscription jeudi 17 mai 2001 Statut Membre Dernière intervention 5 mai 2009 7
19 août 2006 à 13:38
Salut à tous

Voici le code full API à placer dans un module. Ce code n'est pas de moi.

Utilisation pour l'enregistrement : Retval = RegisterComponent("C:\WINNT\SYSTEM32\monocx.ocx", DllRegisterServer)
Utilisation pour le 'désenregistrement' : Retval = RegisterComponent("C:\WINNT\SYSTEM32\monocx.ocx", DllUnRegisterServer)

Retval étant de type long retournant un code de status

File Could Not Be Loaded Into Memory Space = 1
Not A Valid ActiveX Component = 2
ActiveX Component Registration Failed = 3
ActiveX Component Registered Successfully = 4
ActiveX Component UnRegistered Successfully = 5



Option Explicit

Private Declare Function LoadLibraryRegister Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibraryRegister Lib "kernel32" Alias "FreeLibrary" (ByVal hLibModule As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetProcAddressRegister Lib "kernel32" Alias "GetProcAddress" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Private Declare Function CreateThreadForRegister Lib "kernel32" Alias "CreateThread" (lpThreadAttributes As Any, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpparameter As Long, ByVal dwCreationFlags As Long, lpThreadID As Long) As Long
Private Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Private Declare Function GetExitCodeThread Lib "kernel32" (ByVal hThread As Long, lpExitCode As Long) As Long
Private Declare Sub ExitThread Lib "kernel32" (ByVal dwExitCode As Long)

Private Const STATUS_WAIT_0 = &H0
Private Const WAIT_OBJECT_0 = ((STATUS_WAIT_0) + 0)

Public Enum REGISTER_FUNCTIONS
DllRegisterServer = 1
DllUnRegisterServer = 2
End Enum

Public Enum STATUS
[File Could Not Be Loaded Into Memory Space] = 1
[Not A Valid ActiveX Component] = 2
[ActiveX Component Registration Failed] = 3
[ActiveX Component Registered Successfully] = 4
[ActiveX Component UnRegistered Successfully] = 5
End Enum

Public Function RegisterComponent(ByVal Filename As String, ByVal RegFunction As REGISTER_FUNCTIONS) As STATUS

'**********************************************************************************
'Author: Vasudevan S
'Helena, MT
'Function: RegisterComponent
'Purpose: Registers/Unregisters any ActiveX DLL/EXE/OCX component
'Entry Points in ActiveX DLL/EXE/OCX are DllRegisterServer and DllUnRegisterServer
'Input: FileName: Any valid file with complete path
'RegFunction: Enumerated Type(DllRegisterServer, DllUnregisterServer)
'Returns: Returns the status of the call in a enumerated type
'Comments: The utility REGSVR32.EXE need not be used to register/unregister ActiveX
'components. This code can be embedded inside any application that needs
'to register/unregister any ActiveX component from within the code base
'SAMPLE FORM IS INCLUDED
'WORKS IN VB5.0/6.0

'HOW TO CALL:
'-----------
'Dim mEnum As STATUS
'
'TO REGISTER A COMPONENT USE
'mEnum = RegisterComponent("C:\windows\system\filename.dll", DllRegisterServer) 'to Register
'
'If mEnum = [File Could Not Be Loaded Into Memory Space] Then
' MsgBox "Your Message Here", vbExclamation
'ElseIf mEnum = [Not A Valid ActiveX Component] Then
' MsgBox "Your Message Here", vbExclamation
'ElseIf mEnum = [ActiveX Component Registration Failed] Then
' MsgBox "Your Message Here", vbExclamation
'ElseIf mEnum = [ActiveX Component Registered Successfully] Then
' MsgBox "Your Message Here", vbExclamation
'End If
'
'TO UNREGISTER A COMPONENT USE
'mEnum = RegisterComponent("C:\windows\system\filename.dll", DllUnRegisterServer) 'to UnRegister
'
'If mEnum = [File Could Not Be Loaded Into Memory Space] Then
' MsgBox "Your Message Here", vbExclamation
'ElseIf mEnum = [Not A Valid ActiveX Component] Then
' MsgBox "Your Message Here", vbExclamation
'ElseIf mEnum = [ActiveX Component Registration Failed] Then
' MsgBox "Your Message Here", vbExclamation
'ElseIf mEnum = [ActiveX Component UnRegistered Successfully] Then
' MsgBox "Your Message Here", vbExclamation
'End If
'************************************************************************************


Dim lngLib&, lngProcAddress&, lpThreadID&, fSuccess&, dwExitCode&, hThread&

If Filename = "" Then Exit Function

lngLib = LoadLibraryRegister(Filename)
If lngLib = 0 Then
RegisterComponent = [File Could Not Be Loaded Into Memory Space] 'Couldn't load component
Exit Function
End If

Select Case RegFunction
Case REGISTER_FUNCTIONS.DllRegisterServer
lngProcAddress = GetProcAddressRegister(lngLib, "DllRegisterServer")
Case REGISTER_FUNCTIONS.DllUnRegisterServer
lngProcAddress = GetProcAddressRegister(lngLib, "DllUnregisterServer")
Case Else
End Select

If lngProcAddress = 0 Then
RegisterComponent = [Not A Valid ActiveX Component] 'Not a Valid ActiveX Component
If lngLib Then Call FreeLibraryRegister(lngLib)
Exit Function
Else
hThread = CreateThreadForRegister(ByVal 0&, 0&, ByVal lngProcAddress, ByVal 0&, 0&, lpThreadID)
If hThread Then
fSuccess (WaitForSingleObject(hThread, 10000) WAIT_OBJECT_0)
If Not fSuccess Then
Call GetExitCodeThread(hThread, dwExitCode)
Call ExitThread(dwExitCode)
RegisterComponent = [ActiveX Component Registration Failed] 'Couldn't Register.
If lngLib Then Call FreeLibraryRegister(lngLib)
Exit Function
Else
If RegFunction = DllRegisterServer Then
RegisterComponent = [ActiveX Component Registered Successfully] 'Success. OK
ElseIf RegFunction = DllUnRegisterServer Then
RegisterComponent = [ActiveX Component UnRegistered Successfully] 'Success. OK
End If
End If
Call CloseHandle(hThread)
If lngLib Then Call FreeLibraryRegister(lngLib)
End If
End If
End Function
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
18 août 2006 à 17:37
étrange mélange de FSO, de console, et de wscript.shell...
(dommage que tout ne soit pas fais en APIs)

je pense que certains peuvent apprendre des choses interessantes... mais ajoutes en ce cas quelques commentaires ^^

au fait..... pourquoi invoques-tu DllMain :o
MadM@tt Messages postés 2167 Date d'inscription mardi 11 novembre 2003 Statut Membre Dernière intervention 16 juillet 2009 1
18 août 2006 à 17:31
Tu aurais pu au moins essayer de traduire les 2 lignes de commentaire en français, ou mieux en ajouter... Car ton code n'est pas du tout pratique à utiliser, il faut le remanier, et pour un débutant il aura beaucoup de mal.
cs_darunia Messages postés 354 Date d'inscription mercredi 18 décembre 2002 Statut Membre Dernière intervention 24 mars 2011 2
18 août 2006 à 12:58
Quel est l'avantage de cette source par rapport à la commande regsvr32 ?
Rejoignez-nous