Api dans dll pour utilisation dans excel VBA [Résolu]

cslcsi 8 Messages postés vendredi 21 avril 2006Date d'inscription 17 novembre 2011 Dernière intervention - 31 oct. 2011 à 13:24 - Dernière réponse : NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention
- 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

Sample = Ret

End Function


NAME Sample
LIBRARY Sample
DESCRIPTION "Sample Library"
EXPORTS DllMain @1
Sample @2
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 8 nov. 2011 à 21:14
3
Merci
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

Merci NHenry 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de NHenry
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 31 oct. 2011 à 14:11
0
Merci
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
Commenter la réponse de NHenry
cslcsi 8 Messages postés vendredi 21 avril 2006Date d'inscription 17 novembre 2011 Dernière intervention - 31 oct. 2011 à 17:48
0
Merci
Bonjour
Merci de ta réponse.
Eh bien cela plante excel direct
sous 2007 : Microsoft excel a cessé de fonctionner puis redémarrage
sous 98 : pareil

J'ai essayé de déclarer les pai dans le .def : cela ne veut même pas compiler
@+
Commenter la réponse de cslcsi
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 oct. 2011 à 18:08
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 oct. 2011 à 18:15
0
Merci
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
Commenter la réponse de ucfoutu
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 31 oct. 2011 à 18:45
0
Merci
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
Commenter la réponse de ucfoutu
cslcsi 8 Messages postés vendredi 21 avril 2006Date d'inscription 17 novembre 2011 Dernière intervention - 1 nov. 2011 à 10:02
0
Merci
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
Commenter la réponse de cslcsi
ucfoutu 18039 Messages postés lundi 7 décembre 2009Date d'inscriptionContributeurStatut 11 avril 2018 Dernière intervention - 1 nov. 2011 à 10:28
0
Merci
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
Commenter la réponse de ucfoutu
cslcsi 8 Messages postés vendredi 21 avril 2006Date d'inscription 17 novembre 2011 Dernière intervention - 7 nov. 2011 à 21:06
0
Merci
Bonsoir,

Juste une petite info complémentaire que j'ai trouvée :

http://support.microsoft.com/kb/241896/fr

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

@+
framcois
Commenter la réponse de cslcsi
cslcsi 8 Messages postés vendredi 21 avril 2006Date d'inscription 17 novembre 2011 Dernière intervention - 17 nov. 2011 à 21:41
0
Merci
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
Commenter la réponse de cslcsi
NHenry 14261 Messages postés vendredi 14 mars 2003Date d'inscription 21 septembre 2018 Dernière intervention - 17 nov. 2011 à 22:12
0
Merci
Bonjour,

En cherchant :
create tlb for API

J'ai trouvé ça :
http://support.microsoft.com/kb/143258

---------------------------------------------------------------------
[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
Commenter la réponse de NHenry

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.