DLL C++ [Résolu]

Signaler
Messages postés
348
Date d'inscription
mardi 6 avril 2004
Statut
Membre
Dernière intervention
6 novembre 2008
-
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
-
Bonjour,

Je travaille en Visual Basic et j'essaie de créer une DLL C++ afin d'effectuer du calcul matriciel. Pour l'instant, je commence petit avec la transpostion d'une matrice.

"tableau" et une matrice définie en VB dont le nombre de lignes est "nblignes" et le nombre de colonnes est "nbcolonnes".

Lorsque je compile ma DLL, Visual C++ me signale des erreurs sur les lignes "double sortie[lignes][colonnes];" et "sortie[j][i] = tableau[i][j];".

void __stdcall transpose(double *tableau, int nblignes, int nbcolonnes)
{
const int lignes = nbcolonnes;
const int colonnes = nblignes;
double sortie[lignes][colonnes];
int i, j;
for (i = 0; i < nblignes; i++)
{
for (j = 0; j < nbcolonnes; j++)
{
sortie[j][i] = tableau[i][j];
}
}
}

Pourriez-vous m'aider à corriger ce programme ?

Merci a vous,

alonsyl

3 réponses

Messages postés
56
Date d'inscription
samedi 3 juillet 2004
Statut
Membre
Dernière intervention
30 juin 2008

Cette ligne est génante effectivement
sortie[j][i] = tableau[i][j]
tableau n'est qu'un double* donc il ne peut pas avoir deux dimension :
void __stdcall transpose(double **tableau, int nblignes, int nbcolonnes)
Cela rendra les types compatibles :)

Pour le cas de
"double sortie[lignes][colonnes];
la définition n'est bonne, fait un double **sortie ( je ne sais pas si il y a d'autre solution mais c'est celle qui me vient à l'esprit et qui me semble être la bonne )

Amicalement,
The Destiny
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
lignes et colonnes on beau être déclaré en const int, ce sont quand
même des variables donc la valeur n'est pas connue à la compilation.
Pour cette raison tu ne peux pas les utiliser pour indiquer la taille
d'un tableau. Tu dois donc faire de l'allocation dynamique.

Dans l'état actuelle, ta fonction ne servairait à rien (sortie n'est
pas utilisé). Si c'est tableau que tu veux modifier directement, tu n'a
pas besoin de sortie, il te suffit de faire comme ca:



for(i = 0; i < nblignes; i++)

{

for(j = 0; j < i; j++)

{

int t = tableau[i][j];

tableau[i][j] = tableau[j][i];

tableau[j][i] = t;

}

}
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Effectivement en plus tableau n'est pas bien typé.
Pour la deuxième partie de ma réponse, je pense que ca ne marchera que pour des matrices carrées donc ca ne résoud peut être pas ton problème. Dans ce cas fait de l'allocation dynamique comme j'avais dit, par exemple avec HeapAlloc, mais le prototype de ta fonction n'est plus bonne car tu ne rends pas de résultat