Discussions au sujet des autres produits NI

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

Erreur lors de l'appel d'une fonction d'une DLL.

Bonjour,

Je développe actuellement sous LabView 8.0 une application faisant appel à la DLL "DllNVDResult.dll" (ci-joint)
délivrée par un fournisseur.
L’appel de la fonction « NVD_ResultConnect() » entraîne systématiquement l'apparition du message d'erreur suivant :



En revanche, toutes les autres fonctions de cette DLL fonctionnent parfaitement.
Il semblerait qu’il y ait une incompatibilité avec le fonctionnement de LabVIEW puisque l’utilisation de cette même DLL par LabWindows/CVI fonctionne parfaitement.

J'aimerais connaître la raison de cette erreur et comment y remédier. Merci !

0 Compliments
Message 1 sur 10
4 662 Visites

Bonjour,

Cet erreur peut être dû à des paramètres mal renseigné, ou n'ayant pas le bon type.

Votre DLL fait référence à un fichier d'entête qui n'est pas inclue a votre fichier zip : ExportDllNVDResult.h.

Auriez vous ce fichier d'entête contenant toutes les définitions des entrées et sorties pour chaque fonction ?

Avec LabVIEW 8.2, il y q un assistant permettant d'importer facilement une DLL : outils>importer>bibliothèque partagé (.dll).

Cordialement,

 

Christophe S.
Account Manager East of France І Certified LabVIEW Associate Developer І National Instruments France

0 Compliments
Message 2 sur 10
4 635 Visites
Bonjour,

Tout d'abord merci pour votre réponse.

Le prototype de la fonction NVD_ResultConnect() que j'appelle est dans le fichier NVD_Result_EntryPoint.h inclus dans le fichier zip joint à mon premier message.
Ce prototype est :
    EXPORT_API_DLLNVDRESULT int _stdcall NVD_ResultConnect(int nPort, char* Adress, int nSocket);
les paramètres me semblent donc bien renseignés et avec le bon type (je joins le VI connect.vi).
En revanche je n'ai pas le fichier ExportDllNVDResult.h comme vous me le demandez, mais je ne pense pas qu'il puisse me servir en quoi que ce soit.

Concernant LabVIEW 8.2, je ne l'ai malheureusement pas à ma disposition (je travaille sur la version 8.0).

Pensez-vous à une autre source d'erreur ?

Tout télécharger
0 Compliments
Message 3 sur 10
4 629 Visites

Bonjour,

Il me manque une DLL pour pouvoir interfacer votre DLL, son nom est resultat.dll.

Cordialement,

Christophe S.
Account Manager East of France І Certified LabVIEW Associate Developer І National Instruments France

0 Compliments
Message 4 sur 10
4 624 Visites
Voici toutes les DLL que le fournisseur m'a délivrées. Il y a effectivement Resultat.dll.

Message Edité par arnaud_QC le 05-04-2007 02:17 PM

0 Compliments
Message 5 sur 10
4 620 Visites
Merci pour les fichiers, J'ai également le code d'erreur.
 
Je cherche une solution et vous tiens au courant dés que j'aurai une solution.
 
Je vous joins un lien avec les différentes erreurs que l'on peut rencontrer lorsque l'on appelle une DLL dans LabVIEW.
 
 
Cordialement,

Christophe S.
Account Manager East of France І Certified LabVIEW Associate Developer І National Instruments France

0 Compliments
Message 6 sur 10
4 614 Visites

Bonjour,

Nous sommes en train de rechercher la cause du probléme, vous m'aviez signaler qu'avec CVI, cela fonctionait correctement, avez vous essayer avec Visual basic, ou Visual C ?

Cordialement,

Christophe S.
Account Manager East of France І Certified LabVIEW Associate Developer І National Instruments France

0 Compliments
Message 7 sur 10
4 592 Visites
Merci pour vos réponses !

J'ai pu résoudre mon problème avec l'aide du fournisseur.
Il fallait, avant l'appel NVD_ResultConnect(), appeler une autre fonction d'initialisation (InitBufferContents()).

Ce qui m'étonne à présent, c'est que l'appel de NVD_ResultConnect() dans CVI avant celui de InitBufferContents() ne posait aucun problème (il s'agit d'ailleurs de l'ordre d'appel spécifié dans la documentation du fournisseur).
Avez-vous une idée des raisons qui font que cela fonctionne sous CVI mais pas sous LabVIEW ?

Cordialement,

arnaud_QC

0 Compliments
Message 8 sur 10
4 576 Visites
Tout dépend des fonctionnalité de la fonction InitBufferContents().
 
Par exemple, si cette fonction inclu de l'allocation mémoire, LabWindows/CVI allouera automatiquement la mémoire, alors que LabVIEW ne sera pas allouer automatiquement la mémoire dont à besoin la fonction NVD_ResultConnect().
 
Cordialement,
 
 

Christophe S.
Account Manager East of France І Certified LabVIEW Associate Developer І National Instruments France

0 Compliments
Message 9 sur 10
4 570 Visites
Dans mon cas, j'ai une DLL que le fabricant de mon spectrometre a concu, j'utilises leurs VIs.

Le problème est récurrent, j'obtiens le meme code d'erreur "exception occurred within the external code..." j'ai ça à chaque fois que j'ai fermé et réouvert labview. À ce moment là je vais dans le diagramme de mon VI, et j' "ajoute" un nouveau sous-vi qui contient cette librairie configurée de n'importe quelle facon. J'efface ce dernier sous-vi. Et l'erreur disparait à la prochaine exécution. Si je ferme labview et réouvre j'ai le meme probleme, donc impossible d'intégrer cette librairie dans un exécutable, impossible de faire un programme user-friendly... On dirait que labview alloue de la memoire pour la librairie lorsqu'on l'insère dans un diagramme, mais pas à l'ouverture du VI qui contient une librairie...

Je sais pas du tout quoi vérifier pour corriger ca, quelqu'un a une idée géniale?

Merci
0 Compliments
Message 10 sur 10
4 491 Visites