Pb avec les pointeurs

oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004 - 16 juin 2004 à 09:33
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004 - 16 juin 2004 à 16:24
salut,

j'ai un problème dont je ne sais l'origine:

en fait j'ai définis la fonction :

int EnvoyerAvecReponse(char *g_buffer, unsigned long nBytesToWrite, unsigned long nBytesToRead)

et je fais appel à cette fonction dans Main de la façon suivante:

resultat=EnvoyerAvecReponse(g_buffer, (unsigned long)strlen(g_buffer), (unsigned long)(sizeof(g_buffer)-1));

le debbuger me retourne la réponse suivante:

error C2664: 'EnvoyerAvecReponse' : cannot convert parameter 3 from 'unsigned long' to 'unsigned long *'

*********************************************
j'ai re gardé sur le msdn, j'ai trouvé ça (mais je ne me vois pas avoir commis cette erreure):
Compiler Error C2664
'function' : cannot convert parameter number from 'type1' to 'type2'

The specified parameter of the specified function could not be converted to the required type. If you’ve encountered this error on code which compiled with an earlier version of Visual C++, please read Technote: Improved Conformance to ANSI C++ for more information.

The following is an example of this error:

class A {} a;
func( int, A );
void main()
{
func( 1, 1 ); // error, no conversion from int to A
}

*************************************************
à l'aide
merci

18 réponses

cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
16 juin 2004 à 09:44
N'utilise pas de conversions explicites, utilise ta fonction come suit :
resultat=EnvoyerAvecReponse(g_buffer, strlen(g_buffer), sizeof(g_buffer)-1);

les conversions seront mis en place par le compilateur si nécessaire (les conversions implicites : conversion d'ajustement de type et promotion numérik)

voila ++

alhexman
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 10:05
ça marche toujours pas:
quand je fais sizeof((g_buffer)-1) il me retourne:
cannot convert parameter 3 from 'unsigned int' to 'unsigned long *'
voilà, je ne sais pas pourquoi?
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
16 juin 2004 à 10:12
Poste le code paske je ne vois pas trop ou est le pb....
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 10:18
if (argc>2)
{
switch (atoi(argv[1]))
{
case CT_RECEVOIR:
strcpy(Nomfichier,argv[2]);
strcpy(g_buffer, argv[3]);
printf(" le g_buffer:%s\n",g_buffer);
strcat(g_buffer, "\r\r\n\n");

printf("BitsLus dans main:%d\n",BitsLus);

//EnvoyerAvecReponse(char *g_buffer, unsigned long nBytesToWrite, unsigned long nBytesToRead)
resultat=EnvoyerAvecReponse(g_buffer,(unsigned long) strlen(g_buffer),(unsigned long) (sizeof((g_buffer)-1)));
printf("le resultat de Recevoir:%d\n",resultat);
break;
}
return FUNCOK;

}
/****************ENVOYER AVEC REPONSE************/

int EnvoyerAvecReponse(char *g_buffer, unsigned long nBytesToWrite, const unsigned int nBytesToRead)
{
unsigned long nBytesWritten;
unsigned long nBytesRead;
unsigned long EtatReadFile;

char nPORT[16];
fichier=fopen("d:/com.txt", "rt");
if (!fopen("d:/com.txt", "rt"))
{
printf("erreure lors de l'ouverture du fichier COM.txt");
fclose(fichier);
return FUNCERROR;
}

else

{
fgets(nPORT,5,fichier); /* on lit le dernier COM utilise */

fclose(fichier);
printf("la valeur de nPORT dans envoyer:%s\n",nPORT);
printf("la longeur de nPORT dans envoyer:%d\n",strlen(nPORT));

printf("la valeur de g_hCOM dans envoyer:%d\n",g_hCOM);

g_hCOM = CreateFile(nPORT, GENERIC_READ|GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_SYSTEM, NULL);

printf("le resultat de createfile dans envoyer sans recevoir:%d\n",GetLastError());

if(g_hCOM == INVALID_HANDLE_VALUE)
{
printf("Erreur lors de l'ouverture du port COM%d", g_nId);
return FUNCERROR;
}

/* affectation taille des tampons d'émission et de réception */

SetupComm(g_hCOM, RX_SIZE, TX_SIZE);

printf(" le retour de SetupComm dans openCOM:%d\n",GetLastError());

/* configuration du port COM */
if(!SetCommTimeouts(g_hCOM, &g_cto) || !SetCommState(g_hCOM, &g_dcb))
{
printf("Erreur lors de la configuration du port COM%d", g_nId);
CloseHandle(g_hCOM);
return FUNCERROR;
}
}
if(WriteFile(g_hCOM, g_buffer, nBytesToWrite, &nBytesWritten, NULL))
{
printf("\nEnvoie Reussi!!!!!!!!!!!!!!!!\n");
return FUNCOK;
ReadFile(g_hCOM, g_buffer, nBytesToRead, &nBytesRead, NULL);

EtatReadFile=GetLastError();

if(ReadFile(g_hCOM, g_buffer, nBytesToRead, &nBytesRead, NULL))
{

printf("reception reussie!!!\n");
return FUNCOK;
}
else
{
printf("Erreur lors de la réception.\r\n");
return FUNCERROR;
}
}
else
{
printf("le resultat de WriteFile dans writeCOM:%d\n", GetLastError());
return FUNCERROR;
}

}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 10:20
LE PROBLEME N'est pas dans const unsigned int nBytesToRead
car j'ai oublié de le changer en unsigned long avant de te l'envoyer
voilà, merci
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
16 juin 2004 à 10:32
C pas normal ! mais d'abord :
- enleve les cast dont je t'ai parlé ta leur
- avec sizeof((g_buffer)-1), tu veux faire koi ? recup la taille
de g_buffer puis - 1 ? ds ce cas la, c sizeof(g_bufffer) - 1;
- montre moi la maniere dont tu declares g_buffer;
- montre le proto de la fonction EnvoyerAvecReponse
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 10:45
-j'enlève les casts, j'obtient:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'
-la manière dont je déclare g_buffer:
char g_buffer[256]/*globales*/
strcpy(g_buffer, argv[3]);
voilà le problème n'est pas dans g_buffer, le problème est dans le troisième paramètre de la fonction EnvoyerAvecReponse!
-la proto c'est quoi:je t'ai envoyé la fonction.

merci
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
16 juin 2004 à 10:56
Je sais ke le pb vient du troisieme argument mais j'essaye de voir si ya pas d'otre erreur ki pourait entrainer ceci...
Bon alors declare un prototype de ta fonction comme tel :

int EnvoyerAvecReponse(char *, unsigned int, const unsigned int);

et puis essaye de recompiler, si ca marche tjrs pas, je ne sais pas d'ou peut venir le pb...Mais jcontinuerai a chercher tkt
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:04
je l'ai fait j'ai en retour:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'

ce qui est bizzare c'est que le compilateur ne cherche même pas à aller à l'intérieure de la fonction EnvoyerAvecReponse

tu connais pas une façon de convertire un pointeur en variable?
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:06
je l'ai fait j'ai en retour:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'

ce qui est bizzare c'est que le compilateur ne cherche même pas à aller à l'intérieure de la fonction EnvoyerAvecReponse

tu connais pas une façon de convertire un pointeur en variable?
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:06
je l'ai fait j'ai en retour:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'

ce qui est bizzare c'est que le compilateur ne cherche même pas à aller à l'intérieure de la fonction EnvoyerAvecReponse

tu connais pas une façon de convertire un pointeur en variable?

JE NE SAIS POURQUOI IL CHERCHE A CONVERTIR EN UNSIGNED LONG*?????
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:09
je l'ai fait j'ai en retour:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'

ce qui est bizzare c'est que le compilateur ne cherche même pas à aller à l'intérieure de la fonction EnvoyerAvecReponse

tu connais pas une façon de convertire un pointeur en variable?

JE NE SAIS POURQUOI IL CHERCHE A CONVERTIR EN UNSIGNED LONG*?????
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:09
je l'ai fait j'ai en retour:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'

ce qui est bizzare c'est que le compilateur ne cherche même pas à aller à l'intérieure de la fonction EnvoyerAvecReponse

tu connais pas une façon de convertire un pointeur en variable?

JE NE SAIS POURQUOI IL CHERCHE A CONVERTIR EN UNSIGNED LONG*?????
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:10
je l'ai fait j'ai en retour:
cannot convert parameter 3 from 'const unsigned int' to 'unsigned long *'

ce qui est bizzare c'est que le compilateur ne cherche même pas à aller à l'intérieure de la fonction EnvoyerAvecReponse

tu connais pas une façon de convertire un pointeur en variable?

JE NE SAIS POURQUOI IL CHERCHE A CONVERTIR EN UNSIGNED LONG*?????
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
16 juin 2004 à 11:16
oula, les postes a repetitions sont un peu abusé kan mm... ;/
Et aucun moyen de convertir un pointeur en variable sof en applikan la dereferenciation (*)...
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 11:48
ce qui est bizzare c'est qu'il veut convertir en unsigned long* quelque soit le type que je mais pour le troisième paramètre dans la fonction in EnvoyerAvecReponse!!!!

HELP
0
cs_AlexMAN Messages postés 1536 Date d'inscription samedi 21 décembre 2002 Statut Membre Dernière intervention 24 mai 2009 2
16 juin 2004 à 12:01
Bon ben si tu passais ton argument 3 par reference :

int EnvoyerAvecReponse(char *, int, int *):
puis ds ta fonction, tu dereferences tous les apels au 3eme arg...
0
oudkaramla Messages postés 107 Date d'inscription mardi 2 mars 2004 Statut Membre Dernière intervention 5 juillet 2004
16 juin 2004 à 16:24
si bon plus de messages svp
j'ai trouvé la solution:
c'était dans la déclarations des subroutines au début du fichier source.
merci
0
Rejoignez-nous