IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

LabVIEW Discussion :

Labview, DLL et allocation mémoire


Sujet :

LabVIEW

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut Labview, DLL et allocation mémoire
    Bonjour,

    J'espère être dans le bon forum, ma question étant à cheval sur 2 "mondes"...
    Je ne suis pas développeuse labview mais je dois reprendre un dll écrite en C pour labview, ensuite, j'ai un programme (.exe) écrit en labview qui me permet de tester ce que je fais.

    Lors des fonctions C qui sont appelées par le programme labview, je passe de nombreux tableaux en argument, dans un sens comme dans l'autre. Quand je dois réallouer la mémoire j'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    erreur=DSSetHandleSize(TabLV,tailleTabNecessaire*sizeof(float64));
    TabLV est le tableau "connu" par le C et le labview.

    J'ai compris que la fonction DSSetHandleSize allouait la mémoire necéssaire au tableau..très bien. Mais n'est pas en plus nécessaire d'allouer la taille en bon vieux C (malloc) ou bien cette fonction suffit t-elle ?

    J'ai pas mal de bug dans cette DLL, dûs, je crois à des écrasements mémoire (m'enfin, c'est pas comme si labview donnait vraiment d'explication, il plante, c'est tout, ou alors lesdonnées que je récupère sont de l'ordre de 1e-305), d'où ma question. Faut-il faire des malloc en plus ou pas ?

    Merci de vos réponses

  2. #2
    Membre éprouvé Avatar de BrunoIRM
    Homme Profil pro
    Ingénieur Instrumentation
    Inscrit en
    Juillet 2009
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Instrumentation

    Informations forums :
    Inscription : Juillet 2009
    Messages : 785
    Points : 1 160
    Points
    1 160
    Par défaut Re: Labview, DLL et allocation mémoire
    Bonjour,

    Pourrais-tu nous poster le prototype précis de cette fonction "DSSetHandleSize". Elle doit être incluse dans un fichier .h. Ici, nous n'avons que l'appel. Le prototypage de la fonction est important pour faire l'appel via LabVIEW et la DLL.

    Si ta fonction alloue la mémoire, tu ne devrais pas avoir de "malloc" à faire. C'est cette fonction qui s'en charge, mais il faut qu'elle soit correctement appelée.

    De même, pourrais-tu faire un snap de la boite de dialogue qui paramétrise l'appel de ta fonction dans LabVIEW ?

    Enfin, il pourrait être intéressant d'appeler cette fonction dans un "bête" programme C et voir si quelque chose plante .....

    A+

    B.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    En fait, "DSSetHandleSize" est une fonction "labview", présente dans extcode.h.
    En voici la doc :
    http://zone.ni.com/reference/en-XX/h...sethandlesize/

    Et quand au dialogue qui appelle la dll... en fait je n'ai que le .exe du labview, donc pas grand chose malheureusement.

    Mais merci d'essayer quand même :-)

  4. #4
    Membre éprouvé Avatar de BrunoIRM
    Homme Profil pro
    Ingénieur Instrumentation
    Inscrit en
    Juillet 2009
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Instrumentation

    Informations forums :
    Inscription : Juillet 2009
    Messages : 785
    Points : 1 160
    Points
    1 160
    Par défaut Re: Labview, DLL et allocation mémoire
    Re,

    Merci de ta réponse.
    Je comprends mieux le problème avec le lien que tu as envoyé.
    Il s'agit d'une application en CIN (Code Interface Node) ce qui revient effectivement à utiliser du code C dans LabVIEW, mais pas via une DLL externe.

    Malheureusement, je n'ai jamais encore utilisé cette technique. Je ne te suis donc pas d'un grand secours sur ce coup-là.

    Y-a-t-il un pro du CIN dans le coin ???

    Bon courage

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Oh mince, c'est bien par une dll que j'utilise tout ça moi. Quelle est la différence ?
    Bon, je me replonge dans la doc.

  6. #6
    Membre éprouvé Avatar de BrunoIRM
    Homme Profil pro
    Ingénieur Instrumentation
    Inscrit en
    Juillet 2009
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Instrumentation

    Informations forums :
    Inscription : Juillet 2009
    Messages : 785
    Points : 1 160
    Points
    1 160
    Par défaut Re: Labview, DLL et allocation mémoire
    Re,

    Oh mince, c'est bien par une dll que j'utilise tout ça moi. Quelle est la différence ?
    Bon, je me replonge dans la doc.
    Oui, c'est forcément une DLL que tu utilises mais l'écriture de cette DLL est différente de l'utilisation d'une DLL "classique" (par exemple les DLL de l'API de Windows) en ce sens que tu vas utiliser en C des fonctions propres à LabVIEW et à l'interface CIN pour construire ta DLL. Il y a donc une relation étroite entre LabVIEW et la DLL que tu écris. C'est un peu obscur car ce n'est pas une technique très "naturelle" pour programmer en LabVIEW. Je crois qu'elle est essentiellement là pour assumer le portage et l'utilisation de codes C existant.

    Tiens, un ou deux liens que j'ai trouvé :

    http://zone.ni.com/devzone/cda/tut/p/id/4161

    http://digital.ni.com/public.nsf/all...2567B70054206E

    Bon courage !!!

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup pour ces liens Bruno
    J'avoue que même sur le site de Ni, j'étais un peu perdue.

    Je vais lire tout ça de près pour voir si se contenter d'une dll "classique suffirai" (car à part cette fonction, je n'utilise pas de code labview dans la dll) par contre effectivement, il s'agit plus d'un "wrapper" pour labview d'un code C qui est utilisé en C, Matlab, ...

    En même temps, si je change toute la dll, ça voudra dire que les développeurs labview devront changer leurs programmes et là, ça va râler sec

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Alors, après une lecture attentive de ce document
    http://www.ni.com/pdf/manuals/370109a.pdf, il s'agit bien d'une DLL et non d'une CIN dont il s'agit.

    En fait, dans une DLL, lorsqu'on souhaite modifier la taille d'un tableau ou d'une chaine de caractère, il faut utiliser la fonction CIN "DSSetHandleSize", ce qui ne veut pas dire qu'il faille configuer ni coder tout le projet comme une CIN mais juste inclure labview.lib (pour visual c++).

    J'ai résolu mes problèmes d'allocation mémoire en ajoutant +1 à la taille désirée.
    Par exemple ,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DSSetHandleSize(TabLV,(ncols*nlign+1)*sizeof(float64));
    Je ne comprends pas vraiment pourquoi, mais ça marche nickel comme ça
    Si jamais je trouve, je vous tiens au courant.

  9. #9
    Membre éprouvé Avatar de BrunoIRM
    Homme Profil pro
    Ingénieur Instrumentation
    Inscrit en
    Juillet 2009
    Messages
    785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur Instrumentation

    Informations forums :
    Inscription : Juillet 2009
    Messages : 785
    Points : 1 160
    Points
    1 160
    Par défaut Bravo !!!
    Félicitations.
    A une prochaine pour l'explication rationnelle ....

  10. #10
    Membre chevronné

    Inscrit en
    Avril 2005
    Messages
    1 144
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 1 144
    Points : 1 973
    Points
    1 973
    Par défaut
    Sur le format des tableaux en LV et le C, il y a une petite différence de codage: les premiers octets servent pour définir la taille du tableau en LV. C'est peut-être une piste....

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 38
    Points : 19
    Points
    19
    Par défaut
    Effectivement, en lisant la doc, ça serait bien dû au codage:
    Array Handle—Passes a pointer to a pointer to a four-byte value
    for each dimension, followed by the data.
    Du coup, j'ai changé mon +1 en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    erreur=DSSetHandleSize(TabHdl,nbDimTableau*sizeof(char)+tailleTab*sizeof(float64));
    ça me parait plus correct.
    Et voilà
    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Augmenter la capacité d'allocation mémoire d'un dll
    Par aurelius_pr dans le forum C++
    Réponses: 0
    Dernier message: 02/08/2010, 14h56
  2. Dll et allocation mémoire
    Par charliejo dans le forum C++
    Réponses: 12
    Dernier message: 22/02/2006, 17h42
  3. [LabView] DLL
    Par sole dans le forum LabVIEW
    Réponses: 3
    Dernier message: 20/06/2005, 13h20
  4. [Pointeur] Allocation mémoire
    Par Rayek dans le forum Langage
    Réponses: 22
    Dernier message: 20/05/2005, 11h26
  5. Allocation mémoire dynamique
    Par ITISAR dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/01/2005, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo