-----Message d'origine-----
bonjours,
je voudrai executer mon application sur n'importe quel
poste sans installer l'application (Poste W95,W98,XP et
NT4).
j'ai mis les DLL et les OCX dans le même chemin que mon
application mais ca n'a pas marcher.
Merci de votre aide.
.
-----Message d'origine-----
bonjours,
je voudrai executer mon application sur n'importe quel
poste sans installer l'application (Poste W95,W98,XP et
NT4).
j'ai mis les DLL et les OCX dans le même chemin que mon
application mais ca n'a pas marcher.
Merci de votre aide.
.
-----Message d'origine-----
bonjours,
je voudrai executer mon application sur n'importe quel
poste sans installer l'application (Poste W95,W98,XP et
NT4).
j'ai mis les DLL et les OCX dans le même chemin que mon
application mais ca n'a pas marcher.
Merci de votre aide.
.
-----Message d'origine-----
As tu pensé à les enregistrer tes contrôles OCX et DLL
dans la base de registre ?
-----Message d'origine-----
As tu pensé à les enregistrer tes contrôles OCX et DLL
dans la base de registre ?
-----Message d'origine-----
As tu pensé à les enregistrer tes contrôles OCX et DLL
dans la base de registre ?
merci pour votre réponse.
comment je vais faire cette enregistrement a partir de VB.
lors du démarage de l'application
Merci-----Message d'origine-----
As tu pensé à les enregistrer tes contrôles OCX et DLL
dans la base de registre ?
merci pour votre réponse.
comment je vais faire cette enregistrement a partir de VB.
lors du démarage de l'application
Merci
-----Message d'origine-----
As tu pensé à les enregistrer tes contrôles OCX et DLL
dans la base de registre ?
merci pour votre réponse.
comment je vais faire cette enregistrement a partir de VB.
lors du démarage de l'application
Merci-----Message d'origine-----
As tu pensé à les enregistrer tes contrôles OCX et DLL
dans la base de registre ?
Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
> 1/ Je la fais suivre d'un Sleep(200), ca résoud le problème si le plugin
doit être appelé aussitot (mais ce n'est pas forcément le cas, la classe
peut être créée longtemps après dans son appli...).
2/ Si tu regardes bien mon code tu y veras un paramètres /s qui permet de
faire cela en silence, comme spécifié dans l'aide de regsvr32 :
> 1/ Je la fais suivre d'un Sleep(200), ca résoud le problème si le plugin
doit être appelé aussitot (mais ce n'est pas forcément le cas, la classe
peut être créée longtemps après dans son appli...).
2/ Si tu regardes bien mon code tu y veras un paramètres /s qui permet de
faire cela en silence, comme spécifié dans l'aide de regsvr32 :
> 1/ Je la fais suivre d'un Sleep(200), ca résoud le problème si le plugin
doit être appelé aussitot (mais ce n'est pas forcément le cas, la classe
peut être créée longtemps après dans son appli...).
2/ Si tu regardes bien mon code tu y veras un paramètres /s qui permet de
faire cela en silence, comme spécifié dans l'aide de regsvr32 :
Salut Nicolas! :O)Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
J'ai testé cette solution (avant de penser à l'autre posté un peu plus
tôt)..
j'y voyais 2 inconvénients.
1. Le temps que l'enregistrement s'effectue peut nuire à la
déclaration de variables utilisant ces composantes si c'est variable
sont instancié trop tôt par la suite... On peut faire une boucle qui
tente d'instancier les objets jusqu'à ce que Err.Number égal 0 afin
de contourner le problème, mais je n'aime pas trop ça..
<air code>
'***
Call Shell("regavr32 ""project1.dll""")
On Error Resume Next
Do
Call Err.Clear
Dim o As Class1
Set o = New Class1
' code....
Loop While Err.Number > 0
On Error Goto 0
'***
2. Un message s'affiche *à chaque* appel de regsvr32 pour avertir que
la composante à été enregistrer avec succès. :OP
Salut Nicolas! :O)
Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
J'ai testé cette solution (avant de penser à l'autre posté un peu plus
tôt)..
j'y voyais 2 inconvénients.
1. Le temps que l'enregistrement s'effectue peut nuire à la
déclaration de variables utilisant ces composantes si c'est variable
sont instancié trop tôt par la suite... On peut faire une boucle qui
tente d'instancier les objets jusqu'à ce que Err.Number égal 0 afin
de contourner le problème, mais je n'aime pas trop ça..
<air code>
'***
Call Shell("regavr32 ""project1.dll""")
On Error Resume Next
Do
Call Err.Clear
Dim o As Class1
Set o = New Class1
' code....
Loop While Err.Number > 0
On Error Goto 0
'***
2. Un message s'affiche *à chaque* appel de regsvr32 pour avertir que
la composante à été enregistrer avec succès. :OP
Salut Nicolas! :O)Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
J'ai testé cette solution (avant de penser à l'autre posté un peu plus
tôt)..
j'y voyais 2 inconvénients.
1. Le temps que l'enregistrement s'effectue peut nuire à la
déclaration de variables utilisant ces composantes si c'est variable
sont instancié trop tôt par la suite... On peut faire une boucle qui
tente d'instancier les objets jusqu'à ce que Err.Number égal 0 afin
de contourner le problème, mais je n'aime pas trop ça..
<air code>
'***
Call Shell("regavr32 ""project1.dll""")
On Error Resume Next
Do
Call Err.Clear
Dim o As Class1
Set o = New Class1
' code....
Loop While Err.Number > 0
On Error Goto 0
'***
2. Un message s'affiche *à chaque* appel de regsvr32 pour avertir que
la composante à été enregistrer avec succès. :OP
Salut Nicolas! :O)Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
J'ai testé cette solution (avant de penser à l'autre posté un peu plus
tôt)..
j'y voyais 2 inconvénients.
1. Le temps que l'enregistrement s'effectue peut nuire à la
déclaration de variables utilisant ces composantes si c'est variable
sont instancié trop tôt par la suite... On peut faire une boucle qui
tente d'instancier les objets jusqu'à ce que Err.Number égal 0 afin
de contourner le problème, mais je n'aime pas trop ça..
<air code>
'***
Call Shell("regavr32 ""project1.dll""")
On Error Resume Next
Do
Call Err.Clear
Dim o As Class1
Set o = New Class1
' code....
Loop While Err.Number > 0
On Error Goto 0
'***
2. Un message s'affiche *à chaque* appel de regsvr32 pour avertir que
la composante à été enregistrer avec succès. :OP
Salut Nicolas! :O)
Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
J'ai testé cette solution (avant de penser à l'autre posté un peu plus
tôt)..
j'y voyais 2 inconvénients.
1. Le temps que l'enregistrement s'effectue peut nuire à la
déclaration de variables utilisant ces composantes si c'est variable
sont instancié trop tôt par la suite... On peut faire une boucle qui
tente d'instancier les objets jusqu'à ce que Err.Number égal 0 afin
de contourner le problème, mais je n'aime pas trop ça..
<air code>
'***
Call Shell("regavr32 ""project1.dll""")
On Error Resume Next
Do
Call Err.Clear
Dim o As Class1
Set o = New Class1
' code....
Loop While Err.Number > 0
On Error Goto 0
'***
2. Un message s'affiche *à chaque* appel de regsvr32 pour avertir que
la composante à été enregistrer avec succès. :OP
Salut Nicolas! :O)Dans ta Sub Main (donc dans ton module de démarrage), il te suffit
d'enregistrer les composants COM utilisés ainsi :
Call Shell("regsvr32 /s """ & strPath & """, vbHide)
J'ai testé cette solution (avant de penser à l'autre posté un peu plus
tôt)..
j'y voyais 2 inconvénients.
1. Le temps que l'enregistrement s'effectue peut nuire à la
déclaration de variables utilisant ces composantes si c'est variable
sont instancié trop tôt par la suite... On peut faire une boucle qui
tente d'instancier les objets jusqu'à ce que Err.Number égal 0 afin
de contourner le problème, mais je n'aime pas trop ça..
<air code>
'***
Call Shell("regavr32 ""project1.dll""")
On Error Resume Next
Do
Call Err.Clear
Dim o As Class1
Set o = New Class1
' code....
Loop While Err.Number > 0
On Error Goto 0
'***
2. Un message s'affiche *à chaque* appel de regsvr32 pour avertir que
la composante à été enregistrer avec succès. :OP
Hello!
Pour information, je me suis demandé comment faire pour enregistrer les
sans déclarer statiquement le nom dans une api, pour avoir un code un peu
plus générique.
Voici le résultat:
'-----------------------------------------------------------
Option Explicit
Private Const INFINITE = &HFFFFFFFF '// Infinite timeout
Private Declare Function LoadLibrary _
Lib "kernel32" _
Alias "LoadLibraryA" _
( _
ByVal lpLibFileName As String _
) _
As Long
Private Declare Function FreeLibrary _
Lib "kernel32" _
( _
ByVal hLibModule As Long _
) _
As Long
Private Declare Function GetProcAddress _
Lib "kernel32" _
( _
ByVal HMODULE As Long, _
ByVal lpProcName As String _
) _
As Long
Private Declare Function CreateThread _
Lib "kernel32" _
( _
lpThreadAttributes As Any, _
ByVal dwStackSize As Long, _
ByVal lpStartAddress As Long, _
lpParameter As Any, _
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 CloseHandle _
Lib "kernel32" _
( _
ByVal hObject As Long _
) _
As Long
Private Declare Function GetExitCodeThread _
Lib "kernel32" _
( _
ByVal hThread As Long, _
lpExitCode As Long _
) _
As Long
Public Function RegisterDLL(DLLPath As String) As Boolean
Dim HMODULE As Long, lpfnProcAddr As Long, hThread As Long,
As Long
'On charge la dll
HMODULE = LoadLibrary(DLLPath)
'Si le chargement est correct
If HMODULE Then
'On tente de retrouver l'adresse de la procédure
lpfnProcAddr = GetProcAddress(HMODULE, "DllRegisterServer")
'Si l'adresse de la procédure est valide
If lpfnProcAddr Then
'On crée un nouveau thread exécutant la procédure à partir de
son adresse
'Une autre solution serait de créer une dll de callback en c
'Cela éviterait le thread (les threads n'étant pas forcément
stables en VB)
hThread = CreateThread(ByVal 0&, 0, ByVal lpfnProcAddr, ByVal
0&, 0, dwThreadId)
'Si la création du thread a réussit
If hThread Then
'On attend la fin de son exécution
'Peut planter si le thread plante
WaitForSingleObject hThread, INFINITE
'Retrouve le code de sortie
If GetExitCodeThread(hThread, dwThreadId) Then
'Affecte une valeur de retour
RegisterDLL = (dwThreadId = 0)
End If
'Ferme le thread
CloseHandle hThread
End If
End If
'Libère la dll
FreeLibrary HMODULE
End If
End Function
'-----------------------------------------------------------
Voila voila :-)
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Hello!
Pour information, je me suis demandé comment faire pour enregistrer les
sans déclarer statiquement le nom dans une api, pour avoir un code un peu
plus générique.
Voici le résultat:
'-----------------------------------------------------------
Option Explicit
Private Const INFINITE = &HFFFFFFFF '// Infinite timeout
Private Declare Function LoadLibrary _
Lib "kernel32" _
Alias "LoadLibraryA" _
( _
ByVal lpLibFileName As String _
) _
As Long
Private Declare Function FreeLibrary _
Lib "kernel32" _
( _
ByVal hLibModule As Long _
) _
As Long
Private Declare Function GetProcAddress _
Lib "kernel32" _
( _
ByVal HMODULE As Long, _
ByVal lpProcName As String _
) _
As Long
Private Declare Function CreateThread _
Lib "kernel32" _
( _
lpThreadAttributes As Any, _
ByVal dwStackSize As Long, _
ByVal lpStartAddress As Long, _
lpParameter As Any, _
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 CloseHandle _
Lib "kernel32" _
( _
ByVal hObject As Long _
) _
As Long
Private Declare Function GetExitCodeThread _
Lib "kernel32" _
( _
ByVal hThread As Long, _
lpExitCode As Long _
) _
As Long
Public Function RegisterDLL(DLLPath As String) As Boolean
Dim HMODULE As Long, lpfnProcAddr As Long, hThread As Long,
As Long
'On charge la dll
HMODULE = LoadLibrary(DLLPath)
'Si le chargement est correct
If HMODULE Then
'On tente de retrouver l'adresse de la procédure
lpfnProcAddr = GetProcAddress(HMODULE, "DllRegisterServer")
'Si l'adresse de la procédure est valide
If lpfnProcAddr Then
'On crée un nouveau thread exécutant la procédure à partir de
son adresse
'Une autre solution serait de créer une dll de callback en c
'Cela éviterait le thread (les threads n'étant pas forcément
stables en VB)
hThread = CreateThread(ByVal 0&, 0, ByVal lpfnProcAddr, ByVal
0&, 0, dwThreadId)
'Si la création du thread a réussit
If hThread Then
'On attend la fin de son exécution
'Peut planter si le thread plante
WaitForSingleObject hThread, INFINITE
'Retrouve le code de sortie
If GetExitCodeThread(hThread, dwThreadId) Then
'Affecte une valeur de retour
RegisterDLL = (dwThreadId = 0)
End If
'Ferme le thread
CloseHandle hThread
End If
End If
'Libère la dll
FreeLibrary HMODULE
End If
End Function
'-----------------------------------------------------------
Voila voila :-)
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net
Hello!
Pour information, je me suis demandé comment faire pour enregistrer les
sans déclarer statiquement le nom dans une api, pour avoir un code un peu
plus générique.
Voici le résultat:
'-----------------------------------------------------------
Option Explicit
Private Const INFINITE = &HFFFFFFFF '// Infinite timeout
Private Declare Function LoadLibrary _
Lib "kernel32" _
Alias "LoadLibraryA" _
( _
ByVal lpLibFileName As String _
) _
As Long
Private Declare Function FreeLibrary _
Lib "kernel32" _
( _
ByVal hLibModule As Long _
) _
As Long
Private Declare Function GetProcAddress _
Lib "kernel32" _
( _
ByVal HMODULE As Long, _
ByVal lpProcName As String _
) _
As Long
Private Declare Function CreateThread _
Lib "kernel32" _
( _
lpThreadAttributes As Any, _
ByVal dwStackSize As Long, _
ByVal lpStartAddress As Long, _
lpParameter As Any, _
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 CloseHandle _
Lib "kernel32" _
( _
ByVal hObject As Long _
) _
As Long
Private Declare Function GetExitCodeThread _
Lib "kernel32" _
( _
ByVal hThread As Long, _
lpExitCode As Long _
) _
As Long
Public Function RegisterDLL(DLLPath As String) As Boolean
Dim HMODULE As Long, lpfnProcAddr As Long, hThread As Long,
As Long
'On charge la dll
HMODULE = LoadLibrary(DLLPath)
'Si le chargement est correct
If HMODULE Then
'On tente de retrouver l'adresse de la procédure
lpfnProcAddr = GetProcAddress(HMODULE, "DllRegisterServer")
'Si l'adresse de la procédure est valide
If lpfnProcAddr Then
'On crée un nouveau thread exécutant la procédure à partir de
son adresse
'Une autre solution serait de créer une dll de callback en c
'Cela éviterait le thread (les threads n'étant pas forcément
stables en VB)
hThread = CreateThread(ByVal 0&, 0, ByVal lpfnProcAddr, ByVal
0&, 0, dwThreadId)
'Si la création du thread a réussit
If hThread Then
'On attend la fin de son exécution
'Peut planter si le thread plante
WaitForSingleObject hThread, INFINITE
'Retrouve le code de sortie
If GetExitCodeThread(hThread, dwThreadId) Then
'Affecte une valeur de retour
RegisterDLL = (dwThreadId = 0)
End If
'Ferme le thread
CloseHandle hThread
End If
End If
'Libère la dll
FreeLibrary HMODULE
End If
End Function
'-----------------------------------------------------------
Voila voila :-)
--
François Picalausa (MVP VB)
http://faq.vb.free.fr --- http://msdn.microsoft.com
http://apisvb.europe.webmatrixhosting.net