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