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

 C++ Discussion :

[Debutant] Remplissage d'un tableau dans une dll


Sujet :

C++

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Points : 110
    Points
    110
    Par défaut [Debutant] Remplissage d'un tableau dans une dll
    Bonjour à tous;
    Je désire créer une dll qui reçoit un échantillon et le met dans deux tableaux, l'un de taille fixe et l'autre de taille variable;
    Lorsque le tableau de taille fixe est plein, je voudrais écraser les premières valeurs par les nouvelles, un par un (comme dans un buffer circulaire). Ci joint le code que j'ai essayer d'utiliser; le fichier d'entente est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Table.h
    #include <vector>
    using namespace std;
     
    extern "C"
    {
    __declspec( dllexport ) int UptadeTableau(float echantillon,float *signal, int nb);
    }
    le code source est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    #include <stdio.h>
    #include<vector>
    #include<math.h>
    #include<conio.h>
    #include"Table.h"
     
    typedef vector<float> Tableau;
    /* chantillon = echantillon qui vient d'arriver
    signal = tableau de sortie de taille 100
    nb = nbre d'echantillon (en rélité celui n'est pas connu d'avance)
    */
    int UptadeTableau(float echantillon,float *signal, int nb)
    {
    	int n;
    	int t=0; // compteur du nombre d'echantillon dans le tableau
    	Tableau tab; // tableau destiné à contenir les echantillons
    	for(int l=0; l<100; ++l){signal[l]=0;} // Initialisation du tableau de sortie
    	while(t<nb)
    	{
    	/* Mise de l'echantillon dans le tableau de sortie 
    	a la position t%100;
    	*/
    	signal[t%100]= echantillon; 
    	tab.push_back(echantillon);// mise de l'echantillon dans le tableau	
    	n= t;
    	t++; // inrementation du compteur
    	}
    return n;
     
    }
    Lorsque je lance l'exécution, je vois bien que les échantillons arrivent dans la dll. Le probleme est que la tableau de sortie qui devrait contenir une centaine d'échantillons est rempli avec le même échantillon, le dernier qui vient d'arriver;
    je ne sais pas exactement ce qui ne va pas.
    Je sollicite de l'aide;

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Points : 110
    Points
    110
    Par défaut
    Peut-être que je n'ai pas été assez clair. Ci-joint une image qui explique ce que j'obtiens quand j'appelle la dll dans Labview.
    Je dois traiter un nombre total de 171927 échantillon que j'envoie un par un dans ma dll. Comme vous pouvez le remarquer mon tableau de sortie n'a que le dernier élément qui vient d'être envoyer.(ici le 146 ème). Alors quelqu'un peut-il m'aider?
    Fichiers attachés Fichiers attachés

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Points : 1 543
    Points
    1 543
    Par défaut
    Salut,

    En sortant de UptadeTableau les variables locales disparaissent. Du coup il y a un nouveau tab vide à chaque nouvel appel.

    edit : cela dit tab n'est visiblement pas utilisé en lecture, juste pour y ajouter une valeur ?

    MAT.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 106
    Points : 110
    Points
    110
    Par défaut
    Merci; j'ai essayé de déclarer tab en global, donc avant ma fonction. Mais lorsque je verifie la taille de clui-ci au cours de l'exécution, elle varie énormément pour atteindre quelques millions alors je pense (ou du moins ce que je veux) que cette taille augmente d'une unité quand un échantillon est réçu. Donc elle doit être également à t+1 au cours de l'exécution et au nombre total d'échantillon en fin d'éxécution.
    Avez vous une idée pour pouvoir récuperer mon tableau de sortie s'il n'est pas un paramètre de ma fonction?

    D'avance merci

Discussions similaires

  1. [Labview 2009][Debutant] Tableau dans une boucle
    Par JeremyD dans le forum LabVIEW
    Réponses: 6
    Dernier message: 06/05/2010, 12h13
  2. Tableau static dans une dll VC++ ?
    Par lio33 dans le forum MFC
    Réponses: 2
    Dernier message: 11/07/2007, 10h50
  3. [BP7] Problème chargement de ressource dans une DLL
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 26/07/2003, 21h36
  4. PB avec "self" dans une dll
    Par DiJiRiDouS dans le forum Langage
    Réponses: 2
    Dernier message: 21/02/2003, 09h32
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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