3 messages in org.openoffice.fr.progRe: [prog] instruction declare et con...
FromSent OnAttachments
guil...@philips.comFeb 18, 2005 2:36 am 
Bernard MarcellyFeb 18, 2005 9:41 am 
guil...@philips.comFeb 21, 2005 4:46 am 
Actions with this message:
Paste this link in email or IM:
Paste this link in email or IM:
Atom feed for this thread
Paste this URL into your reader:
Subject:Re: [prog] instruction declare et controle d'appareils de mesures par GPIBActions...
From:Bernard Marcelly (marc@club-internet.fr)
Date:Feb 18, 2005 9:41:52 am
List:org.openoffice.fr.prog

Bonjour, Quelques avis sur tes questions - quoique je n'utilise pas les appels de DLL -

Le 2005-02-18 11:37, guil@philips.com a écrit :

Bonjour,

J'utilise l'instruction Declare pour appeler les fonctions d'une DLL, et j'ai 2 questions sur ce sujet : - il semble qu'on ne puisse pas remplacer le nom de la DLL "nom.dll" par une constante prédéfinie de type string (ce n'est pas possible non plus en Visual Basic). Y a-t-il une impossiblité réelle ? En effet, ce serait bien pratique pour définir 30 fonctions de la DLL, avec toujours le même nom et le même chemin, absolu donc à rallonge, et susceptible de changer ! Et en fin de compte, c'est illisible.

Effectivement, je vois qu'utiliser une constante déclenche une erreur de syntaxe. Mais tu peux découper la déclaration en plusieurs lignes: Declare Function Fonction_En_C _ Lib "Ma_bibli.dll" _ (ByVal param1 As Integer, param2 As Integer) As Integer La deuxième ligne sera ainsi toujours la même, si ça peut te consoler.

- comment déclarer le type pointeur (d'une fonction d'une DLL) et comment l'utiliser ? N'hésitez pas à me corriger si je me trompe. Cas avec un pointeur dans les paramètres : int Fonction_En_C(int param1, int* param2); => Declare Function Fonction_En_C Lib "Ma_bibli.dll" (ByVal param1 As Integer, param2 As Integer) As Integer

Cela correspond aux explications de l'aide en ligne. Mais il faut être sûr que Integer est équivalent à int du C. Basic Integer est une valeur sur 16 bits.

Cas moins simple avec un pointeur dans la fonction : char* Fonction_En_C(int param1, int* param2); => ???

Alors là, ça se corse, Basic ne permet pas de voir l'aspect pointeur. Je suggère d'utiliser : As Variant Et je m'attendrais à obtenir dans le Variant un tableau. Mais Basic n'a pas de type caractère. Alors Basic pourrait convertir le retour de la fonction en un tableau de Integer. À moins qu'il ne renvoie un String... Tu peux essayer de stocker le résultat de la fonction dans une variable Variant et en visualiser le contenu avec Xray.

P.S. Pour ceux intéressés par le contrôle d'équipement par GPIB, j'ai déjà réussi à utiliser la DLL "Gpib32.dll" pour commander mes appareils. Ca s'annonce bien !

Bravo! quand tu auras résolu tes problèmes, penses à faire un petit HowTo des astuces à connaître.

Bon courage, Bernard