problème avec une DLL

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

problème avec une DLL

Message par f1roe »

Bonjour,

J'ai une DLL qui est récalcitrante sous PB (je l'utilise sous VB6 sans problème)

La fonction suivante fonctionne très bien en PB :

short int GetInsideHumidity_() /* "C" * /

je l'utilise comme ça en PB:
Humidite.w=CallFunction(lib,"GetInsideHumidity_V") ;c'est un "short int"

maintenant une autre fonction mais avec un autre type :

float GetBarometer_V() /* "C" */

Je l'utilise comme ça en PB:
Barometre.f=CallFunction(lib,"GetBarometer_V") ; c'est un float

et la le résultat n'est pas bon.

J'ai testé avec les autres types sans résultat.

Si quelqu'un a une idée !

Merci d'avance

Sébastien
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

C'est peut être un float double precision sur 8 octets qu'il faut, PB ne le fait pas!
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

Merci pour cette réponse, néanmoins dans la doc j'ai l'info suivante

"foat refers to a 4 byte floating point"

et cela fonctionne sous VB6 comme ça :
Public Declare Function GetBarometer_V Lib "VantagePro.dll" () As Single
...
Dim ValBarometreSgn As Single
ValBarometreSgn = GetBarometer_V()

donc.... ?

Cordialement

Sébastien
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

bah si tu nous dis où trouver la dll, on pourra faire des essais ^^
en charchant sur le net j'ai juste trouvé ca :
http://www.weathermatrix.net/bbs/vantag ... s/350.html

c'est bien un double et pas un single qui est déclaré en VB... peut être que VB (vu que c'est un langage interprêté) est capable de passer ca en Single de facon transparente...

pour la télécharger c'est ici:
http://www.davisnet.com/support/weather ... kdll20.exe
c'est un zip... en le renomant en zip on peut zapper toute la partie automatique

Dri
Dernière modification par Dr. Dri le mar. 13/sept./2005 12:46, modifié 1 fois.
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

de suite.... elle est ici :
http://www.davisnet.com/support/weather ... vantagedll

Et pour le complément d'info ici :

http://www.davisnet.com/support/weather ... antagecomm

Effectivement avec une déclaration en "Double" dans VB6 ça marche aussi bien (j'ai testé à l'instant)

Merci d'avance

Sébastien[/url]
Dernière modification par f1roe le mar. 13/sept./2005 12:50, modifié 1 fois.
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

le temps que j'édite tu as répondu ^^
effectivement dans le zip le readme dit bien que c'est un réel...

j'ai cru voir du blabla sur le port COM, cette dll fait appel à du hardware particulier ?

Dri
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

non juste ouverture d'un port COM de manière simple. Une fonction va interroger la console météo et stock les résultats dans une structure. Les autres fonctions vont interroger cette structure ensuite... rien de très méchant

Sébastien
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

si j'ai rien sur mon port COM je peux tout de même tester les fonctions ?

Dri
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

probablement avec une fonction comme celle-ci :

float GetDLLVersion_V();

La réponse est 2

Séb
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

En passant par de l'assembleur en ligne c'est possible

Code : Tout sélectionner

OpenLibrary(0, "VantagePro.dll")

f.f
CallCFunction(0, "GetDllVersion_V")
!FSTP dword [v_f]

Debug f
Faudrait que fred prenne en compte le type de retour pour éviter ce genre de problèmes...

Dri
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

Merci Dri,

J'ai encore un petit problème a la compilation : moi et l'assembleur 8O

FSTP dword [V_F]
error : undefined symbol

Séb
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

Code : Tout sélectionner

OpenLibrary(0, "VantagePro.dll")

ma_variable.f
CallCFunction(0, "GetDllVersion_V")
!FSTP dword [v_ma_variable]

Debug ma_variable
c'est peut être plus clair comme ca ?
(t'en fais pas je suis aussi une quiche en assembleur)

Dri
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

toujours un problème de compilation :
(PB 3.94)

j'ai la fenetre suivante :
Purebasic Assembler error

Purbasic.asm [825]

FSTP dword [v_ma_variable]
error : undefined symbol

Séb
Dr. Dri
Messages : 2527
Inscription : ven. 23/janv./2004 18:10

Message par Dr. Dri »

ah j'ai pas fait gaffe, il faut activer l'assembleur (chez moi il est tout le temps activé)
Menu Compiler -> Compiler Options
coche Enable Inline ASM Support

Dri
f1roe
Messages : 34
Inscription : dim. 04/sept./2005 22:10
Localisation : Lyon 3ème

Message par f1roe »

j'avais déjà vérifié cette option. Mais rien a faire.
Je ne comprends pas le principe avec l'ASM... vais regarder les docs :mad:

Séb
Répondre