cs_darunia
Messages postés354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 2011
-
18 août 2006 à 12:58
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 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.
cs_Warning
Messages postés516Date d'inscriptionsamedi 3 février 2001StatutMembreDernière intervention24 octobre 20062 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és796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 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és23Date d'inscriptionmardi 8 août 2006StatutMembreDernière intervention30 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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 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és796Date d'inscriptionjeudi 17 mai 2001StatutMembreDernière intervention 5 mai 20097 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)
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és17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 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és2167Date d'inscriptionmardi 11 novembre 2003StatutMembreDernière intervention16 juillet 20091 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és354Date d'inscriptionmercredi 18 décembre 2002StatutMembreDernière intervention24 mars 20112 18 août 2006 à 12:58
Quel est l'avantage de cette source par rapport à la commande regsvr32 ?
23 août 2006 à 01:06
Declare Function DllRegisterServer Lib "activex.OCX" () As Long
Declare Function DllUnregisterServer Lib "activex.OCX" () As Long
??
19 août 2006 à 16:03
L'intêret principal est de pouvoir gérer les codes de retour.
19 août 2006 à 15:23
19 août 2006 à 15:18
19 août 2006 à 13:50
19 août 2006 à 13:38
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
18 août 2006 à 17:37
(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
18 août 2006 à 17:31
18 août 2006 à 12:58