ricky78
Messages postés126Date d'inscriptionjeudi 5 juin 2003StatutMembreDernière intervention11 juillet 2006 22 juil. 2005 à 12:24
re
Ce tuto explique les pointeurs pout des tableaux a une dimension, il doit surement etre transposable pour des tableau a 2D
http://chgi.developpez.com/pointeur/
En general a 1D
int Algo(int *result);
*result = 10;
appel de la fonction : algo(&result)
en 2D je ne sais pas sinon passe ta matrice en une dimension dans l'echange entre fonction puis remet la en 2D si tu veux dans ta fonction
cs_AlexMAN
Messages postés1536Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention24 mai 20091 22 juil. 2005 à 13:32
typedef int (WINAPI *DLL_Function)(int *_Value);
Ta fonction attend un tableau a 2 dimensions, pourquoi le prototype ne comprend qu'une seule dimension ?!
typedef int (WINAPI *DLL_Function)(int **_Value);
Et que vient faire ce WINAPI ? Je vois que tu ne definis pas cette convention d'appel dans la DLL (WINAPI == __stdcall), donc soit tu l'enleves du prototype, soit tu le mets dans la DLL.
+2(p - n)
Vous n’avez pas trouvé la réponse que vous recherchez ?
bathof
Messages postés28Date d'inscriptionjeudi 5 mai 2005StatutMembreDernière intervention31 janvier 2009 25 juil. 2005 à 18:58
J'ai deux solutions à ton problème :
La première solution : si tu programmes en c++ tu peux créer
un tableau dynamique à deux dimentions avec new et delete ou si tu
programmes en c avec malloc et free, solution recommandée.
Attention : sizeof sur un pointeur renvoie la taille du pointeur et non pas la taille du tableau.
Exemple avec new et delete (c++) :
// Création de ton tableau dynamique à deux dimentions
// Dans cette exemple le tableau sera " Tab [2][4] "
int** Tab = NULL;
int NbrCol = 4;
int NbrLig = 2;
Tab = new int* [NbrLig];
for(int I=0; I<NbrLig; I++ )
Tab[I] = new int [NbrCol];
// Tu le passes en paramètre de ta fonction
Algo(Tab);
// Et quand tu en as plus besoin tu le detruis (IMPORTANT, sinon la ram sature )
/* Attention une fois détruit tous les pointeurs qui pointent vers cette zone mémoire
ne seront plus utilisables, valeur incorrect */
for(int I=0; I<NbrLig; I++)
delete [] Tab[I];
delete [] Tab;
Tab = NULL;
La deuxieme solution : Il faut modifier ta fonction comme cela, cette solution n'est pas la bonne mais elle fonctionne.
DLLIMPORT int Algo(int* tempresult, int SizeLigne)
{
#define result(X,Y,Z) tempresult[ (X*Z)+Y ]
int NbrCol = (SizeLigne/sizeof(int));
// Afficher une partie du tableau result[0][0]
printf("%d", result(0,0,NbrCol) );
// Modifier une partie du tableau result[0][0] = 2
result(0,0,NbrCol) = 2;
#undef result
}
// et dans ton programme
int Tab[2][4];
Algo( (int*)*Tab, sizeof(Tab[0]) );
voila j'éspère que cela ta aidé, bonne chance et a +