Formalisme Donnée pour appel d'une DLL

Bonjour à tous,
Je suis confronté à un problème dans le cadre de l'utilisation d'une DLL externe, je n'arrive pas à formaliser les données sous labview pour qu'elle soit correctement interprété par la dll via un noeud d'appel externe.
Les informations fournies par les fichiers d'entête sont les suivantes :
/** \brief Permet de lire et vérifier l'EEPROM BARTON HILL */
EXPORT int EEPROM_BARTONHILL_CheckRead(FATHANDLE fatHandle, Read_EEPROM_BARTONHILL* data);
/** \brief parametres de la lecture de l'EEPROM BARTON HILL */
typedef struct
char errorCode; /** \brief code erreur de la requete */
char refFile[FILENAME_SIZE]; /** \brief Chemin et nom du fichier de reference */
char maskFile[FILENAME_SIZE]; /** \brief Chemin et nom du fichier de mask */
unsigned int testResult; /** \brief Nombre d'octet different de la reference */
} Read_EEPROM_BARTONHILL;
/** \brief Taille maximum en octets du chemin d'un fichier */
#define FILENAME_SIZE 50
Sous python, elles sont interprétées de la manière suivante :
class Read_EEPROM_BARTON(Structure):
_pack_ = 1
_fields_ = [("errorCode", c_byte),
("refFile", c_char*50),
("maskFile", c_char*50),
("result", c_uint),
J'arrive à faire fonctionner correctement cette bibliothèque sous Python, mais je n'arrive pas à mettre en forme correctement les chaines de caractères pour que labview les interprètes correctement. Il s'agit de lien relatif vers un fichier.
Comment faire pour que labview interprète correctement les pointeurs inclus dans la structure, je pense avoir utiliser quasiment toutes les possibilités du noeud d'appel sans succès.
Je vous remercie d'avance pour vos réponses.
Cordialement,
Michael.

Bonjour Eric,
Merci de ta réponse.
Comme tu l'as signalé, j'ai bien réaliser l'appel à DLL avec un cluster, en configurant le noeud de méthode en "Adapter au type".
A partir de là, j'ai tester de les configurations possibles (handle par valeur, pointeur sur les handles, .....), rien n'y fait la dll me retourne un code d'erreur me signalant que mes paramètres sont non valides.
Quand tu parles de préallouer les chaines de caractères, tu signifies quoi ?
Pour ma part, j'ai forcé la taille des chaines de caractères à 50 via deux méthodes (soit avec la fonction formater chaine qui force la taille de la chaine résultat à 50, soit en passant par un tableau de U8 redimensionner).
Je pense que mon problème vient justement de la gestion des chaînes de caractères, mais je ne vois pas le problème dans ma gestion.
Cordialement,
Michael

Similar Messages

  • Appel d'une dll avec un callback d'une autre fonction

    Bonjour.
    J'ai une carte d"acquisition vidéo dont je souhaite réaliser les drivers sous labview. Une DLL est fournie avec le manuel SDK d'utilisation.
    Mais je coince à ce niveau :
    Register Draw callback function: RegisterDrawFun()
    API:
    int RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun), LONG nUser)
    Parameters:
    DWORD nport Channel Index
    DRAWFUN(DrawFun) callback function
    LONG nUser user data
    Callback function explanation:
    void CALLBACK DrawFun(LONG nPort,HDC hDc,LONG nUser)
    nPort channel number
    hDc devide context of offscreen surface is similar to the DC of display window
    nUser user data
    Return Values:
    If the function succeeds, the return value is 0.
    Remarks:
    When the video is previewed with offcreen mode, the application call this function to get the device context of offscreen surface so that the application can draw lines, strings, rectangles on the surface of video.
    C'est le callback de la fonction "drawfun"  que je ne sais pas mettre en oeuvre. Et dans quelle DLL de windows ce trouve cette fonction car elle n'est pas dans la DLL fournie.
    Pourriez vous aussi me dire , comment obtient t'on le "handle" d'une valeur contenu dans un indicateur pour le donner en argument d'un appel à une DLL.
    Merci d'avance pour votre aide.
    Cordialement,
    MH.

    Dupliqué >> http://forums.ni.com/t5/LabVIEW/appel-d-une-dll-av​ec-un-callback-d-une-autre-fonctionappel-d-une/m-p​...

  • Recupérer les valeur d'un Control via un .obj appelé depuis une DLL- Getting a Control value from an .obj file called from a dll

    Bonjour,
    Suite au passage à la version CVI 2013, il faut passer par un fichier .obj au lieu du .c quand on veut utiiser la LoadExternalModule.
    Le pb qui en résulte impossibilité de récupérer la valeur des control dans l'uir géré par le .obj qui est appelé par une dll.
    Autrement, il m'est impossible de faire parvenir à la dll les valeur des control ( dll qui appelle le .obj).
    Quelqu'un a eu le même soucis amigos?
    Merci
    Hi,
    When using the LoadExternalModule function in CVI 2013, we can no longer use a .c file. Instead we have to use an .obj file.
    My issue is that' impossible for me to get a control value from an .iur managed by the .obj witchi is called by a dll. 
    Otherwise it's impossible for me to get the control vale when calling the .obj from a dll.
    Any suggestions Amigos
    Thanks

    For people who could be interested in, here the code I provided to the customer. This code demonstrates that calling a function defined in a .obj file from a DLL which is called itself by a program can be realized without throwing any error.
    In order to use this example, you will have to :
    1) Open "main.cws"
    2) Define "Madll" as Active Project (right clic on the project and click on "Set Active Project")
    3) Build the DLL (CTRL+M)
    4) Define "Main" as Active Project
    5) Click on "Debug Project" in order to build the executable and run it
    This example has been built with CVI 2013.
    Jérémy C.
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    Travaux Pratiques d'initiation à LabVIEW et à la mesure
    Du 2 au 23 octobre, partout en France
    Attachments:
    main.zip ‏70 KB

  • Appel d'une dll avec un callback d'une autre fonctionappel d'une dll avec un callback d'une autre fonction

    Bonjour.
    J'ai une carte d"acquisition vidéo dont je souhaite réaliser les
    drivers sous labview. Une DLL est fournie avec le manuel SDK
    d'utilisation.
    Mais je coince à ce niveau :
    Register Draw callback function: RegisterDrawFun()
    API:
    int RegisterDrawFun(DWORD nport, DRAWFUN(DrawFun), LONG nUser)
    Parameters:
    DWORD nport Channel Index
    DRAWFUN(DrawFun) callback function
    LONG nUser user data
    Callback function explanation:
    void CALLBACK DrawFun(LONG nPort,HDC hDc,LONG nUser)
    nPort channel number
    hDc devide context of offscreen surface is similar to the DC of display window
    nUser user data
    Return Values:
    If the function succeeds, the return value is 0.
    Remarks:
    When the video is previewed with offcreen mode, the
    application call this function to get the device context of offscreen
    surface so that the application can draw lines, strings, rectangles on
    the surface of video.
    C'est le callback de la fonction "drawfun"  que je ne sais pas mettre
    en oeuvre. Et dans quelle DLL de windows ce trouve cette fonction car
    elle n'est pas dans la DLL fournie.
    Pourriez vous aussi me dire , comment obtient t'on le "handle" d'une
    valeur contenu dans un indicateur pour le donner en argument d'un appel à
    une DLL.
    Merci d'avance pour votre aide.
    Cordialement,
    MH.

    Salut,
    Tu dois utiliser un "Call Library Function Node".  Je ne saurais comment traduire en francais. 
    Ca se situe a l'interieur des fonctions de connectivite sous libraries et executables.
    Lorsque tu installes le "Call Library Function Node" sur ton diagramme, tu dois par-apres le configurer.
    Tu cliques (2x) sur l'icone et tu choisi la fonction dll auquel tu veux envoyer des valeurs.  Une fois choisi, tu peux joindre les parametres.

  • Passer un tableau à une dll labview

    Bonjour
    J'ai créé une dll labview avec une methode qui sert à passer un tableau de double.
    Quand je passe mon tableau , j'ai une erreur memoire insufissante et ça ne fonctionne pas. je joints mon code et le projet de la dll
    la methode : labview dll_tableau
    le client de test pour la dll : test dll.vi
    question annexe : comment fait on pour débugger une dll en labview?
    Merci
    Attachments:
    test.zip ‏808 KB

    Bonjour,
    J'ai essayé de faire fonctionner votre programme. En appelant le programme test dll.vi j'obtiens bien une erreur de mémoire insuffisante. En revanche je ne comprends pas l'intérêt de la structure séquence, ni celui des différentes étapes. En n'utilisant uniquement l'étape n°2, cette erreur de mémoire n'intervient plus. Je n'ai pas été plus loin dans les tests. Aussi, à quoi de servent les différentes étapes de cette structure?
    Bonne journée,
    M-Junior

  • Comment créer une dll sous labview avec plusieurs fonctions venant du même VI et possédant un tabcontrol ?

    Comment créer une dll sous labview avec plusieurs fonctions venant du même VI et possédant un tabcontrol ?

    Bonjour,
    L’utilisation d’une « commande d’onglet », ou « tabcontrol », ne pose pas de problème pour la définition d’une DLL à partir d’un VI.
    Selon la version de LabVIEW que vous utilisez, le processus de création de DLL sera différent.
    Si vous utilisez une version antérieure à la v8, vous pouvez vous reporter à ce lien : Construire une DLL avec LabVIEW 7.0.
    Sinon, vous devez enregistrer votre VI dans un projet, puis définir le connecteur de votre VI avec les paramètres d’entrées/sorties (cette opération est indépendante des différentes « commandes d’onglet » que vous avez pu implémenter).
    Sélectionnez, dans le projet les « spécifications de construction » dans le projet (via un click droit), pour créer une DLL. Dans la boite de dialogue qui s’ouvre alors, à l’onglet « fichiers source », vous pouvez ajouter votre VI parmi les « VIs exportés » et configurer, en fonction des E/S câblées sur le connecteur de votre VI, les fonctions contenues dans la DLL.
    J’espère que ces quelques éléments auront pu vous éclairer.
    Cordialement,
    Guillaume H.
    National Instruments France
    #adMrkt{text-align: center;font-size:11px; font-weight: bold;} #adMrkt a {text-decoration: none;} #adMrkt a:hover{font-size: 9px;} #adMrkt a span{display: none;} #adMrkt a:hover span{display: block;}
    >> NIDays 2011, le mardi 8 février au CNIT de Paris La Défense

  • Possibilité de passage d'une structure C d'une dll appelée dans Labview

    Bonjour, 
    J'aimerais savoir s'il existe un moyen de passer une structure (type de donnée en C) au
    travers de la  boîte de dialogue : "Appeler une fonction d'une
    DLL" pour l'utiliser dans Labview (idéalement sauver directement dans un
    cluster).
    A ce jour j'utilise des pointeurs sur les paramètres individuels pour passer les
    données traitées par ma DLL. 
    Exemple : void  Message(uint32_t *arg1, double *arg2, int32_t arg3)
    En vous remerciant d'avance,
    Meilleures salutations.

    Bonjour,
    En effet, il existe un moyen de passer un cluster dans une DLL en utilisant le type de données "Adapt to Type".
    Il existe une knowledgeBase sur le site de National Instruments expliquant la procédure à suivre.
    How Do I Use Adapt To Type For Call Library Function Nodes?
    Salutations,
    Laurent P.
    Application Engineer
    National Instruments

  • Appel d'une fonction Dll avec un tableau de long en parametre

    Je dois communiquer sous labview avec un DLL comportant de fonction importante definie ainsi
    long DLLCALL DLL_Read( long Array[]);
    long DLLCALL DLL_WRITE( long Array[]);
    ces deux fonction prennent en parametre un tableau de 30 long. ...
    je ne sais comment configurer sous labview l'appelt à ces deux fonctions?
    quelqu'un peu m'aider (en français S.V.P)

    Bonjour,
    Pour passer un tableau de données de type long d'une DLL sous LabVIEW, vous devez configurer le noeud d'appel "Appeler une fonction d'une DLL" de la manière suivante:
    * function name = FuncName
    * parameter = arg1
    * type = array
    * data type = signed 32-bit integer
    Le prorotype équivalent est: void FuncName (long *arg1).
    Vous trouverez de nombreuses informations sur l'intégration des DLLs dans LabVIEW au lien ci-dessous:
    * Integrating DLLs
    http://zone.ni.com/devzone/devzone.nsf/webcategories/E2A99E7E10D5725D862567AC004F0A53
    Bonne continuation.
    Matthieu Gourssies
    National Instruments France

  • Associer une dll à un projet et executer un programme appelant sans mettre la dll dans VXI pnp

    Bonjour
    Je souhaiterai exécuter un programme appelant une dll que j'ai compilé et que j'ai lier à l'exécutable mais pas placé dans VXI pnp.
    La compilation se passe bien mais lorsque je lance l'application, un message apparaît et indique que la dll est intraouvable j'ai inclut le chemin du dossier dans lequel est stocké la DLL dans les include path mais sans succès.
    Merci d'avance pour votre aide

    Bonjour,
    Merci d'avoir posté votre question sur le forum de National Instruments.
    Pourvez-vous m'envoyer votre code?
    Brice S.
    National Instruments France

  • Appeler une dll qui est referencé à une autre dll

    Bonjour tout le monde.
    J'ai besoin de votre aide pour résoudre mon problème :
    En effet je dispose d' un laminoir qui est piloté par un programme de VB6 référencé a une dll de "MX du fabricant de moteur" J'ai créé une dll sous vb édition express 2008 pour récupérer ce programme et et j ai reussi à appeler cette cette dll par vb.net pour controler mes moteurs mais pour appeler cette dll par labview 7.0 j 'obtiens l'erreur 1172 qui me dit qu'il y a un pb d instance lié à la dll de MX component.
    Ce que j arrive pas a comprendre c est k j ai utiliser labview pour appeler une dll.net référencé a une dll.net et ça marche. Mais pas une dll.net référencé a une dll de MX composent

    Bonjour,
    Merci d'avoir posté votre question sur le forum de National Instruments.
    Pourvez-vous m'envoyer votre code?
    Brice S.
    National Instruments France

  • Format d'écriture pour le chemin d'une dll

    Bonjour,
    Dans mon programme, je travaille avec une dll. Tout fonctionne parfaitement avec ma dll.
    Actuellement dans le chemin de la dll, c’est sous la forme c:\toto\.....\...\dll\madll.dll
    Or mon projet à cette architecture
    Dossier Nom du projet
                    + Programme principal.vi
                                   + dossier Fonctions dans lequel j'ai des vi pour chaque fonction de ma dlll
                                   + dossier dll dans lequel j'ai ma dll utilisé par mon programme
                                   + dossier sous-vi
    Ce que je souhaite, c’est qu’aulieu de pointer vers l’adresse complète de la dll, c’est lui dire que depuis mon programme principal, il regarde dans la dossier dll, et là prend la dll en question
    En gros je veux une écriture du style \dll\madll.dll aulieu de c:\toto\.....\...\dll\madll.dll
    Je me doute que c’est faisable, mais je ne sais pas comment l’écrire pour que ça fonctionne.
    Merci d’avance.
    Résolu !
    Accéder à la solution.

    Pour réaliser cela il faut que tu prennes la fonctions "Répertoire de l'application (VI)" qui te donne l'aquivalent de C:\toto\ pour une application se trouvant dans : C:\toto\application.exe et aprés tu n'a plus qu'a recrée le chemin avec les fonctions "composer" ou "decomposer un chemins"  pour avoir le chemin complet vers la DLL.
    Dans ton cas tu devras utiliser la fonction composer pour ajouter le repertoire dll au chemin.

  • Liaison d'une structure entre CVI et TestStand pour une DLL

    Bonjour,
    Je vous écris car en se moment je fais un ajout d'instrument sur un driver en passant par une DLL. Pour le nouvel appareil, il me faut modifier un projet existant. Ce qui me pose porblème c'est que dans le projet il y a une structure qui est passé en paramètre de fonctions usuelles et j'aimerais pouvoir ajouter dans cette structure de nouveau élément. Car quand je code dans la structure les nouvelles composantes et que je modifie, la structure déjà existant dans la séquence TestStand lié à l'ancien code, je n'arrive pas à transmettre les valeurs de TestStand à mon code. Alors que les anciens composants de la structure prennent bien leurs valeurs. J'ai bien essayé de recréer sous TestStand un nouveau type de structure sans partir de l'existant, hélas le résultat à été le même.
    Il est fort possible que j'ai oublié une manipulation n'étant pas encore totalement bien familiariser avec l'environnement de CVI et de TestStand.
    Merci de l'effort de lecture. En attendant une réponse à mon problème, je reste disponible pour plus de détails

    Rodéric -- En ce qui concerne la structure, j'y ai pensé et du coup la première chose que j'ai fait c'est en recréer une nouvelle. en ce qui concerne le menu déroulant, je t'ai pris un imprimé. On voit bien ma structure dans les choixs mais quand je la séléectionne on se retrouve dans le cas du premier screenshot.
    Eric -- Pour le Header, je le recompile en même temps que mon projet et j'arrive ensuite à voir mon paramètre lors d'une implantation de celle-ci depuis ma structure. concrètement j'ai du mal à percevoir le "reconstruire la DLL en prenant en considérant la nouvelle structure". Si tu pouvais un peu plus m'éclairer sur ce point, s'il te plait.
    Pièces jointes :
    MenuDeroulant.JPG ‏19 KB
    PieceOfCode.JPG ‏18 KB

  • J'ai une exception lorsque je lance mon VI pour la deuxieme fois. Ce VI contient une DLL . Pourquioi cette exception?

    Lorsque je lance mon VI qui contient un appel à une DLL, mon VI se plante à la deuxième exécution et je ne comprends pas pourquoi il ya une exception à la deuxième exécution et non à la première. Est-ce un problème de mémoire ou un problème de la DLL?
    Votre expérience est la très bien venue.Merci!

    Bonsoir,
    es tu sur que le plantage vient de la DLL ? Ne serait ce pas un registre à
    décalage non initialisé ?
    Est ce une Dll que tu as créé ou utilise tu la Dll d'un autre programme ?
    cordialement
    jerome
    "Alex80" <[email protected]> a écrit dans le message de news:
    [email protected]..
    > Lorsque je lance mon VI qui contient un appel à une DLL, mon VI se plante
    > à la deuxième exécution et je ne comprends pas pourquoi il ya une
    > exception à la deuxième exécution et non à la première. Est-ce un problème
    > de mémoire ou un problème de la DLL?
    > Votre expérience est la très bien venue.Merci!

  • Comment lire les donnée d'une dll

    bonjour
    je suis entrain d'utiliser un vi qui possede une dll. je voudrai savoir comment configure le dll
    coordialement skipi
    Solved!
    Go to Solution.
    Attachments:
    Sans titre.JPG ‏63 KB
    Sans titre1.JPG ‏54 KB

    OUI je connait tous les details du vi ( entrée et sortie). Le probleme que j ai c'est le paramettre il ne prend pas toute les entres du vi automatiquement.
    Avez vous un exemple a me montrer.
    MERCI
    COORDIALEMENT SKIPI
    Attachments:
    Sans titre.JPG ‏47 KB
    Sans titre1.JPG ‏41 KB

  • Intégration d'une DLL générée sur Simulink dans un algorithme Labview, à finalité app temps réel sur NI myRIO

    Bonjour à tous,
    En deux mots : dans le cadre d'un projet interfacultés, je dois intégrer à mon algorithme Labview l'exécution d'un algorithme d'optimisation actuellement codé sur Simulink d'un tiers. La finalité de mon algorithme est de générer une app temps réel que j'exécute sur le matériel embarqué, NI myRIO.
    J'ai pu lire que justement il était possible d'intéragir entre Labview et Simulink, via le fait que Simulink permet de générer une DLL, et Labview de la lire/exécuter.
    Mes questions sont :
    Est-ce tout-à-fait envisageable dans mon optique d'app temps réel sur myRIO ? (Par exemple, l'exécution de la DLL pourra-t-elle se faire en parallèle du reste mon algorithme Labview (autres acquisitions de données, etc))
    Quid du toolkit NI Labview model interface ? Est-il indispensable de l'acquérir (et si oui pourquoi) ?
    Je sais qu'il est possible de réécrirer directement sur Labview des algorithmes d'optimisation (ici, du MPC), mais ce serait à priori la dernière option envisagée.

    Bonjour,
    Le MIT est la seule option non-obsolète pour exécuter des modèles Simulink dans LabVIEW. Et si tant est que vous utilisez MIT 2014 (avec LabVIEW 2014), vous pourrez exécuter votre modèle Simulink sur le myRIO.
    Les bases pour que tout fonctionne se trouvent ici :
    - http://digital.ni.com/public.nsf/allkb/E552B0CD4E48215586257DF7005BE055?OpenDocument
    Cordialement,
    Eric M. - Application Engineering Specialist
    Certified LabVIEW Architect
    Certified LabWindows™/CVI Developer

Maybe you are looking for

  • I need help to change the password to my Apple ID

    I have two apple ID's I made the second one for my iCloud when I bought my iPad not knowing that I could have used my normal Apple ID that I use for everything else. Now I cant sign out of that apple ID in my icloud on all three of my devices my ipho

  • My Samsung Syncmaster LD220 USB monitor will no longer work. Please help.

    I just upgraded to Lion with my MacBook Pro and now my Samsung SyncMaster LD 200g monitor will no longer work. If you can help please do.

  • Deletion/Change of Business Partner Relationship

    All, We are having a issue regarding replication of partner relationship changes from R/3 to CRM. Partner deletions/changes in R/3 are not replicated in CRM. We do not do any customer master changes in CRM. If a Ship-to is deleted in R/3 the BDoc com

  • Can not open pdf files

    every time I try to open a pdf file it wants me to use Adobe instead of preview what has happened?

  • Spry Menu and website differ on linked pages

    Two pages on my website (www.SimplyGreen.biz) are pointing to an incorrect page on my Spry Menu Bar.  When I look at the Spry Menu Bar set up - it is correct and when I look at the code behind that menu bar - it is pointing to the correct page also.