cslcsi
Messages postés8Date d'inscriptionvendredi 21 avril 2006StatutMembreDernière intervention17 novembre 2011
-
31 oct. 2011 à 13:24
NHenry
Messages postés15048Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention19 mars 2023
-
17 nov. 2011 à 22:12
Bonjour,
J'ai créé une dll sous vb6 que j'utilise dans excel vba 98 en déclarant les fonctions.
Cela marche bien.
Dès que j'inclus ou plus exactement que le code de la dll passe sur une api windows,
cela plante excel.
Je ne sais comment résoudre ce problème ?
Si je lance sous excel Sample(0), pas de problème
Si je lance sample(1) plantage direct..
D'avance merci pour votre aide
@+
Voici le code de ma dll en vb6 ainsi que le fichier de définition de la dll
Attribute VB_Name = "Module1"
Declare Function GetTickCount Lib "kernel32" () As Long
Public Function DllMain(hInst As Long, fdwReason As Long, lpvReserved As Long) As Boolean
Select Case fdwReason
Case DLL_PROCESS_DETACH
' No per-process cleanup needed
Case DLL_PROCESS_ATTACH
DllMain = True
Case DLL_THREAD_ATTACH
' No per-thread initialization needed
Case DLL_THREAD_DETACH
' No per-thread cleanup needed
End Select
End Function
Public Function Sample(p As Long) As Long
Dim Ret As Long
If p = 0 Then
Ret = 1
Else
Ret = GetTickCount()
End If
NHenry
Messages postés15048Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention19 mars 2023156 8 nov. 2011 à 21:14
Bonjour,
Je ne vois pas le lien entre
Declare Function Sample Lib "C:\fichiers\FRANCOIS\VB\dll_actx\sample\sample.dll" (p As Long) As Long
et la bibliothèque de type.
Visiblement le lien que tu donnes parles de fichiers ActiveX, pas de DLL API Windows.
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
NHenry
Messages postés15048Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention19 mars 2023156 31 oct. 2011 à 14:11
Bonjour,
Quand tu parles de plantage :
- tu as un message d'erreur ?
- ça fige l'application ?
- ça ferme Excel sans prévenir ?
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 31 oct. 2011 à 18:08
aucune raison pour que le code montré ne marche pas et provoque un plantage si :
1) l'argument passé l sample est bien un long
2) la variable d'accueil de la valeur retournée est également un long
Ton problème est donc ailleurs.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Vous n’avez pas trouvé la réponse que vous recherchez ?
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 31 oct. 2011 à 18:15
Montre-nous donc pour commencer :
comment est appelée la fonction (ton code exact)
Car pour moi :
je lance sample(1)
ne veut rien dire ! On ne "lance" pas cette fonction ! On l'utilise en l'appelant et et lui passant un paramètre et on récupère ce qu'elle retourne.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 31 oct. 2011 à 18:45
Je ne vois par ailleurs pas la déclaration de tes constantes alors que tu les utilises dans DllMain
Et comme je ne vois pas non plus d'utilisation de Option Explicit, toutes ces constantes sont = 0 !
Et comme elles sont toutes = 0, le 1er case de ton select case sera le bon. Et comme il correspond à la valeur 0, il correspondra également à "No per-process cleanup needed"
Et en aucun cas, tu n'entreras dans DllMain = True
Ouais ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
cslcsi
Messages postés8Date d'inscriptionvendredi 21 avril 2006StatutMembreDernière intervention17 novembre 2011 1 nov. 2011 à 10:02
Bonjour,
La fonction DllMain m'importe peu.
Coté Excel vba, j'ai placé le code suivant dans un module. Lorsque p vaut 0, pas de problème
lorsque p est différent de 0, arrêt de excel direct.
Je peux mettre en ligne ma dll de test Sample (me dire comment faire ?)
Merci
Declare Function Sample Lib "C:\fichiers\FRANCOIS\VB\dll_actx\sample\sample.dll" (p As Long) As Long
Public Function SampleTest(p As Long) As Long
SampleTest = Sample(p)
End Function
ucfoutu
Messages postés18038Date d'inscriptionlundi 7 décembre 2009StatutModérateurDernière intervention11 avril 2018220 1 nov. 2011 à 10:28
La fonction DllMain m'importe peu.
Ah bon !
Tu as pourtant apparemmernt choisi de créer une dll Windows à partir de VB6 !
La fonction DllMain y a une vocation, dans ce cas : l'initialisation, par Windows.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Cela me dit qu'il y a bien un problème. Je devrais créer un "type Library"
mais je ne sais comment faire sous VB, de plus je n'ai pas visual studio
donc pas MkTypLib.EXE or MIDL.EXE
cslcsi
Messages postés8Date d'inscriptionvendredi 21 avril 2006StatutMembreDernière intervention17 novembre 2011 17 nov. 2011 à 21:41
Bonsoir Henry,
Si vers la fin ils partlent de dll active x contenant des api.
Mais ensuite, je ne sais plus trop quoi faire
@+
Si une DLL ActiveX ou le projet UserControl contient des déclarations d'API, vous pouvez rencontrer des blocages pendant l'arrêt du processus/thread ou la création d'objet, même si la case à cocher Mode d'exécution autonome a été activée dans le cas d'une DLL ActiveX. Pour contourner ce problème, vous pouvez utiliser une Bibliothèque de types au lieu d'une instruction Declare dans Visual Basic. Pour plus d'informations sur la façon d'utiliser une Bibliothèque de types, cliquez sur le numéro%2 ci-dessous pour afficher l'article%2 correspondant dans la Base de connaissances Microsoft.
189133 COMMENT FAIRE : Rendre la DLL C plus accessible à VB avec une Bibliothèque de types
---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS et aussi ce lien[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : )
[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés./list ---
Mon site