cerisiera
Messages postés3Date d'inscriptionlundi 2 octobre 2006StatutMembreDernière intervention 3 octobre 2006
-
2 oct. 2006 à 15:16
cs_djalilosse
Messages postés12Date d'inscriptiondimanche 4 avril 2010StatutMembreDernière intervention24 mai 2012
-
16 juin 2012 à 14:33
Bonjour
Je suis en train d'écrire un logiciel pour piloter un appareil via une connection GPIB-IEEE.
Pour cela j'utilise la dll GPIB-32.dll.
Lors de l'envoi de commandes à l'appareil, tout se passe bien mais pour relire une valeur retournée de l'appareil, impossible, une erreur fait planter tout mon programme.
Voici l'erreur :
Une exception non gérée du type 'System.NullReferenceException' s'est produite dans XSCom.exe
Informations supplémentaires : La référence d'objet n'est pas définie à une instance d'un objet.
Voici la déclaration de ma fonction :
Declare
Function
ibrd
Lib
"Gpib-32.dll" (
ByVal
ud
As
Integer
,
ByRef
sstr
As
String
,
ByVal
cnt
As
Integer
)
As
Integer
Et voici l'appel de ma fonction :
Dim BufferReceive
As
String
State = ibrd(5, BufferReceive$, 2000)
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 2 oct. 2006 à 15:43
Premier point hors sujet, les déclarations des fonctions sont-elles au format .net concernant les types de données ?
Je pense, vu la déclaration que tu nous met ici (normalement si mes souvenirs sont bons, c'est du long qui est utiliser par la dll, convertie ici en integer pour .NET).
Pour ton problème, bien que ma dernière utilisation de gpib32 remonte assez loin, ici le problème viens je pense de la décalration de la chaine de caractère.
Ici ta chaine est déclarée, mais elle n'est pas créée. Donc quand tu la passe en argument, en fait tu passe quelque chose d'inexistant.
Pour que ta chaine existe, il faut soit la déclarer en taille fixe (je sais, .net n'aime pas normalement), soit après la déclaration et avant l'appel, la remplir avec des caractères.
Donc soit tu la décalre en longueur fixe, mais ça t'oblige à la déclarer en variable globale :
<VBFixedString(255)> Dim BufferReceive
AsString
Soit tu la remplie avec des espaces avant l'appel :
Dim BufferReceive As String
BufferReceive = Space(255)
State = ibrd(5, BufferReceive$, 2000)
Bonne prog sous en IEEE488
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 3 oct. 2006 à 10:08
Ok, après un petit peu de recherche, j'ai récupéré un exemple pour VB.net2003 sur le site de NI
Il semblerait qu'il y ait quelques particularités dans la déclaration des fonctions de la dll.
Il faudrait que tu la déclare ainsi :
Declare
Function ibrd
Lib "Gpib-32.dll" (
ByVal ud
As
Integer, <MarshalAsAttribute(UnmanagedType.VBByRefStr)>
ByRef sstr
As
String,
ByVal cnt
As
Integer)
As
Integer
C'est toutes les strings qui sont déclarées ainsi.
Tu peux trouver l'exemple ici , tu charge et tu dézippe le zip, tu ouvre le projet (si tu es avec net2005, il va te demander de le convertir, accepte) (si tu as un message d'erreur sur un fichier UpdateReport, c'est pas grave, il suffit de le supprimerdu projet, il sert à rien).
Les déclarations sont au début du fichier vbib32.vb, tu trouveras les constantes NI dans NIglobal.vb
---- Sevyc64 (alias Casy) ---- # LE PARTAGE EST NOTRE FORCE #
aymandac
Messages postés1Date d'inscriptionmardi 27 février 2007StatutMembreDernière intervention 7 mars 2008 7 mars 2008 à 11:42
salut j'ai un probleme,je veux connecter un pc avec une appareil de mesure dont il trouve une interface GPIB/USB
est ce que vous pouvez m'aider pour faire cette interface virtielle
cs_djalilosse
Messages postés12Date d'inscriptiondimanche 4 avril 2010StatutMembreDernière intervention24 mai 2012 16 juin 2012 à 14:33
salut, sous Windows on utilise GPIB 32 pour configurer la carte GPIB, mais sous Linux on utilise???, j'ai programmer ma carte sous Windows pour faire une interface sous delphi7, ça marche très bien, mais je veux maintenant programmer cette carte avec C ou éclipse j'ai pas décider, je pense que l'environnement java plus récent, mais mon problème j'ai aucune idée sur la programmation en base niveau sous Linux, esq des explications sur la programmation avancée sous Linux, j'ai utilisé la distribution ubuntu12.04 LTS, merci d'avance