variable Double passée à une dll

Le
user
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

Jacquelin Hardy
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacques93
Le #21293821
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.
Jean-marc
Le #21293991
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.

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;
Publicité
Poster une réponse
Anonyme