Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

variable Double passée à une dll

2 réponses
Avatar
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

2 réponses

Avatar
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.
Avatar
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.

--
Jean-marc Noury (jean_marc_n2)
FAQ VB: http://faq.vb.free.fr/
mailto: remove '_no_spam_' ;