DLL C++

Résolu
alonsyl Messages postés 348 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 6 novembre 2008 - 9 mai 2005 à 14:38
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 - 9 mai 2005 à 16:19
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

cs_thedestiny Messages postés 56 Date d'inscription samedi 3 juillet 2004 Statut Membre Dernière intervention 30 juin 2008
9 mai 2005 à 16:09
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
3
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mai 2005 à 16:09
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;

}

}
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
9 mai 2005 à 16:19
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
0
Rejoignez-nous