j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module)
Public Declare Function S52_moveView Lib "libS52.dll" _
(ByVal horizontal As Double, ByVal vertical As
Double) As Long
(Dans le code du formulaire)
Select Case KeyCode
Case vbKeyUp
S52_moveView 0#, 1#
Case vbKeyDown
S52_moveView 0#, -1#
End Select
Le problème : lorsqu'une valeur négative est passée à la dll, j'obtiens
une erreur d'overflow ou une erreur de Division par zéro.
L'action normale provoquée par le code est le redessin d'une image créée
avec OpenGL, mais recentrée un peu vers le haut avec vbKeyUp, ou vers le
bas avec vbKeyDown. Donc, je peux seulement utiliser vbKeyUp, l'autre
"plante" le logiciel.
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jacques93
Le 01/03/2010 03:00, a écrit :
Bonjour,
j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module) Public Declare Function S52_moveView Lib "libS52.dll" _ (ByVal horizontal As Double, ByVal vertical As Double) As Long
(Dans le code du formulaire)
Select Case KeyCode Case vbKeyUp S52_moveView 0#, 1#
Case vbKeyDown S52_moveView 0#, -1# End Select
Le problème : lorsqu'une valeur négative est passée à la dll, j'obtiens une erreur d'overflow ou une erreur de Division par zéro.
L'action normale provoquée par le code est le redessin d'une image créée avec OpenGL, mais recentrée un peu vers le haut avec vbKeyUp, ou vers le bas avec vbKeyDown. Donc, je peux seulement utiliser vbKeyUp, l'autre "plante" le logiciel.
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Merci de me lire et éventuellement de m'aider
Je n'ai pas les outils pour vérifier, mais comment ton paramètre 'vertical' déclaré en double sous VB est il déclaré dans ta DLL en C ?
Et quel est l'intérêt d'utiliser un 'Double', les codes de touches clavier, si ce sont les seules concernés, peuvent se contenter d'un Long ou d'Integer.
--
Cordialement,
Jacques.
Le 01/03/2010 03:00, user@domain.invalid a écrit :
Bonjour,
j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module)
Public Declare Function S52_moveView Lib "libS52.dll" _
(ByVal horizontal As Double, ByVal vertical As
Double) As Long
(Dans le code du formulaire)
Select Case KeyCode
Case vbKeyUp
S52_moveView 0#, 1#
Case vbKeyDown
S52_moveView 0#, -1#
End Select
Le problème : lorsqu'une valeur négative est passée à la dll, j'obtiens
une erreur d'overflow ou une erreur de Division par zéro.
L'action normale provoquée par le code est le redessin d'une image créée
avec OpenGL, mais recentrée un peu vers le haut avec vbKeyUp, ou vers le
bas avec vbKeyDown. Donc, je peux seulement utiliser vbKeyUp, l'autre
"plante" le logiciel.
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Merci de me lire et éventuellement de m'aider
Je n'ai pas les outils pour vérifier, mais comment ton paramètre
'vertical' déclaré en double sous VB est il déclaré dans ta DLL en C ?
Et quel est l'intérêt d'utiliser un 'Double', les codes de touches
clavier, si ce sont les seules concernés, peuvent se contenter d'un
Long ou d'Integer.
j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module) Public Declare Function S52_moveView Lib "libS52.dll" _ (ByVal horizontal As Double, ByVal vertical As Double) As Long
(Dans le code du formulaire)
Select Case KeyCode Case vbKeyUp S52_moveView 0#, 1#
Case vbKeyDown S52_moveView 0#, -1# End Select
Le problème : lorsqu'une valeur négative est passée à la dll, j'obtiens une erreur d'overflow ou une erreur de Division par zéro.
L'action normale provoquée par le code est le redessin d'une image créée avec OpenGL, mais recentrée un peu vers le haut avec vbKeyUp, ou vers le bas avec vbKeyDown. Donc, je peux seulement utiliser vbKeyUp, l'autre "plante" le logiciel.
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Merci de me lire et éventuellement de m'aider
Je n'ai pas les outils pour vérifier, mais comment ton paramètre 'vertical' déclaré en double sous VB est il déclaré dans ta DLL en C ?
Et quel est l'intérêt d'utiliser un 'Double', les codes de touches clavier, si ce sont les seules concernés, peuvent se contenter d'un Long ou d'Integer.
--
Cordialement,
Jacques.
Jean-marc
wrote:
Bonjour,
Hello,
j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module) Public Declare Function S52_moveView Lib "libS52.dll" _ (ByVal horizontal As Double, ByVal vertical As Double) As Long
(Dans le code du formulaire)
Select Case KeyCode Case vbKeyUp S52_moveView 0#, 1#
Case vbKeyDown S52_moveView 0#, -1# End Select
Le problème : lorsqu'une valeur négative est passée à la dll, j'obtiens une erreur d'overflow ou une erreur de Division par zéro.
Et donc tout fonctionne bien quand tu passse une valeur positive ?
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Difficile à dire - Tout semble ok mais c'est dur à dire sans voir le code source de la Dll, en tout cas la déclaration en C++ de la fonction concernée.
A essayer, dans l'ordre: 1) plutôt que de passer des valeurs en dur (0# et 1#), essayer avec des variables de type double
Dim a As Double, b As Double
a = 1 : b = 1 S52_moveView a, b
2) Confirmer que si les variables ont des valeurs positives, alors : a) ca ne plante pas b) le comportement est correct
3) Essayer ensuite avec des valeurs négatives a) avec a = -1 : b = 0 b) a = 0 : b = -1
Peut etre cela permettra t-il d'y voir plsu clair.
j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module)
Public Declare Function S52_moveView Lib "libS52.dll" _
(ByVal horizontal As Double, ByVal vertical As
Double) As Long
(Dans le code du formulaire)
Select Case KeyCode
Case vbKeyUp
S52_moveView 0#, 1#
Case vbKeyDown
S52_moveView 0#, -1#
End Select
Le problème : lorsqu'une valeur négative est passée à la dll,
j'obtiens une erreur d'overflow ou une erreur de Division par zéro.
Et donc tout fonctionne bien quand tu passse une valeur positive ?
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Difficile à dire - Tout semble ok mais c'est dur à dire sans voir le
code source de la Dll, en tout cas la déclaration en C++ de la
fonction concernée.
A essayer, dans l'ordre:
1) plutôt que de passer des valeurs en dur (0# et 1#), essayer avec
des variables de type double
Dim a As Double, b As Double
a = 1 : b = 1
S52_moveView a, b
2) Confirmer que si les variables ont des valeurs positives, alors :
a) ca ne plante pas
b) le comportement est correct
3) Essayer ensuite avec des valeurs négatives
a) avec a = -1 : b = 0
b) a = 0 : b = -1
Peut etre cela permettra t-il d'y voir plsu clair.
j'utilise une dll écrite en C++ dont une des déclarations est :
(Dans un module) Public Declare Function S52_moveView Lib "libS52.dll" _ (ByVal horizontal As Double, ByVal vertical As Double) As Long
(Dans le code du formulaire)
Select Case KeyCode Case vbKeyUp S52_moveView 0#, 1#
Case vbKeyDown S52_moveView 0#, -1# End Select
Le problème : lorsqu'une valeur négative est passée à la dll, j'obtiens une erreur d'overflow ou une erreur de Division par zéro.
Et donc tout fonctionne bien quand tu passse une valeur positive ?
Je n'ai vraiment aucune idée de la provenance de cette erreur .
Difficile à dire - Tout semble ok mais c'est dur à dire sans voir le code source de la Dll, en tout cas la déclaration en C++ de la fonction concernée.
A essayer, dans l'ordre: 1) plutôt que de passer des valeurs en dur (0# et 1#), essayer avec des variables de type double
Dim a As Double, b As Double
a = 1 : b = 1 S52_moveView a, b
2) Confirmer que si les variables ont des valeurs positives, alors : a) ca ne plante pas b) le comportement est correct
3) Essayer ensuite avec des valeurs négatives a) avec a = -1 : b = 0 b) a = 0 : b = -1
Peut etre cela permettra t-il d'y voir plsu clair.