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

MFC Discussion :

dll contenant plusieurs fonctions


Sujet :

MFC

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2009
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 70
    Par d�faut dll contenant plusieurs fonctions
    bonjour

    je travail sur un programme sous vc++ 6. j'ai cr�� une dll afin d'�ffectuer des calculs sur les valeurs d'un pointeurs stockant les niveaux de gris d'une image.

    la premi�re fonction est une moyenne glissante. elle fonctionne tr�s bien dans mon programme client.
    la deuxi�me fonction est une fonction de normalisation par rapport � la moyenne des valeurs des niveaux de gris. et l� �a bloque. je red�finis un pointeur vers la fonction Norme de ma dll dans mon programme client. mais ensuite mon programme ne veut pas faire la norme des valeurs. j'ai une erreur � l'execution du programme client. si j'execute en faisant d'abord la normalisation, j'ai une normalisation ab�rrante et un probl�me sur le filtre. je ne peux pas faire les options en meme temps (filtre + norme).

    S'agit il d'un probl�me de pointeur ou de fonctions dans la dll ?

    voici le code:
    programme client (dialog based)
    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
     
    ...
    HMODULE HDll=LoadLibrary("TraitProfil.dll");
    typedef double* Filtrage_func(double*,int);
    Filtrage_func *pFiltrage=(Filtrage_func*)GetProcAddress(hDll,"Filtrage");
    typedef double* Norme_func(double*);
    Norme_func *pNorme=(Norme_func*)GetProcAddress(hDll,"Norme");
     
    ///plus loin dans le code, une combo box appelle ces fonctions
    double *moy;
    moy = new double[1000];
    if (stFiltre=="2")
    {
    moy=pFiltrage(m_pdData);
    m_cvDraw.AddDataBuffer(xxx,moy,1000,color); //fonction pour dessiner le graph contenant moy
    }
     
    double *norme;
    norme=new double[1000];
    if(stNorme=="Moyenne")
    {
    norme=pNorme(moy);
    m_cvDraw.AddDataBuffer(xxx,norme000,color); //fonction pour dessiner le graph contenant norme c'est ici que ca ne fonctionne plus
    }
    pour la dll
    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
    32
    33
    34
    35
     
    extern "C" double* Filtrage(double *a, int n)
    {
    double somme[1000];
    double *moyenne;
    moyenne=new double[1000];
    for (int i=0;i<1000;i++)
    {
      somme[0]=a[i];
      for(int j=0;j<100;j++)
      {
        somme[1+j]=somme[j]+a[1+i+j];
      }
      moyenne[i]=somme[i]/n;
    }
    return moyenne;
    }
     
    extern "C" double* Norme(double *c)
    {
      double sum;
      double av;
      double *b;
      b=new double[1000];
      for(int i=0;i<999;i++)
      {
        sum += c[i];
      }
      av=sum/1000;
      for(intk=0;k<999;k++)
      {
        b[k]=c[k]/av;
      }
      return b;
    }
    merci d'avance car je ne suis certainement pas tr�s claire

  2. #2
    R�dacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en s�curit�
    Inscrit en
    Mai 2007
    Messages
    11 517
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 62
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : Consultant en s�curit�
    Secteur : High Tech - Op�rateur de t�l�communications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Par d�faut
    Dans ta d�claration, la fonction filtrage attend 2 param�tres
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    extern "C" double* Filtrage(double *a, int n)
    Dans ton code, tu n'en passe qu'un seul :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    Filtrage_func *pFiltrage=(Filtrage_func*)GetProcAddress(hDll,"Filtrage");
    ...
    moy=pFiltrage(m_pdData);
    De plus, ton code ne montre pas la d�claration et l'initialisation de m_pdData
    Raymond
    Vous souhaitez participer � la rubrique R�seaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs syst�me et r�seau � configurer leurs �quipements SNMP r�seau.
    e-verbe Un logiciel de conjugaison des verbes de la langue fran�aise.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2009
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 70
    Par d�faut
    pardon je me suis tromp�e en recopiant, j'ai bien deux param�tres pour la fonction filtrage ce n'est pas ca le probl�me car seule elle fonctionne nickel...

    en ce qui concerne m_pdData c'est un pointeur double d�clar� et initialis� dans une fonction ainsi:

    if (m_pdDada!=NULL)
    delete[] m_pdData;
    m_pdData=new double m_pdData[taille];

    ainsi que dans le .h double* m_pdData;

    merci d'avoir lu mon message

  4. #4
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Attention, je te d�conseille les delete[] dans la fonction appelante.
    En r�gle g�n�rale, ce qui est allou� par un module doit �tre d�sallou� par le m�me module (m�me si la version DLL de la CRT a tendance � �viter cela, je conseille de toujours en avoir le r�flexe).
    Ainsi, ta DLL devrait exporter une fonction DeleteDoubles(double*).

    De plus, ce code manque cruellement de const, et tes int devraient �tre des size_t.

    PS: Est-ce normal que la fonction Norme() ne prenne pas en compte le dernier �l�ment du tableau?
    Edit: Ah, je crois que j'ai trouv� l'erreur: Dans la fonction Norme(), la variable locale sum n'est pas initialis�e...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  5. #5
    Membre confirm�
    Profil pro
    Inscrit en
    F�vrier 2009
    Messages
    70
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : F�vrier 2009
    Messages : 70
    Par d�faut
    merci mais ca ne fonctionne toujours pas en tenant compte de vos remarques. je pense que c'est un probl�me de pointeur...mais je ne sais pas comment m'en sortir.

  6. #6
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    As-tu pens� � initialis� sum � z�ro?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 12
    Dernier message: 08/07/2015, 15h08
  2. [Info]pliage/depliage de plusieurs fonctions d'un coup
    Par pierre.zelb dans le forum Eclipse Java
    R�ponses: 2
    Dernier message: 22/06/2005, 14h17
  3. appeler plusieurs fonctions � partir d'une checkbox
    Par amelhog dans le forum G�n�ral JavaScript
    R�ponses: 2
    Dernier message: 25/05/2005, 16h10
  4. [VB.NET] Variable visible dans plusieurs fonctions ?
    Par Webman dans le forum ASP.NET
    R�ponses: 2
    Dernier message: 19/05/2004, 17h36
  5. [Appli][Autre language]dll-contenant form
    Par flash dans le forum Langage
    R�ponses: 6
    Dernier message: 20/09/2002, 14h18

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