Fichier ini

Signaler
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008
-
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008
-
salut a tous voila j'ai un probleme je me sert de la fonction
getprivateprofilestring et elle marche mais je peut recupere que les 3
premier caractere voila donc si quelqun sais comme y remedier merci

14 réponses

Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Mets ton code ici pour qu'on puisse t'aider.

Shell
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008

voila mon code

j'ai bien dit c'est une dll

de plus je vois pas trop se que sa change j'ai pris l'example de je sais plus qui est sa me fait pareill.
enfin peut etre il y a une parametre a metre quelque part merci


#include <windows.h>



int __declspec (dllexport) ecrire(char *section,char *cle,char *valeur,char *fichier)
{
WritePrivateProfileString(section,cle,valeur,fichier);
}

char* __declspec (dllexport) lire(char *section,char *cle,char *fichier)
{
char *temp ;

GetPrivateProfileString(section,cle,"",temp,sizeof(temp),fichier);

MessageBox(NULL,temp,"teste",1);

return temp;
}
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
char * == 4 octets, donc 3 caracteres + caractere final, le compte est bon !

Il faut allouer de la memoire, donc soit malloc soit tout simplement char temp[256].

+2(p - n)
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008

ok merci je vais essayer
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008

c'est bon sa marche mais maintenant le probleme que j'avais avant aussi c'est que ma dll ne renvoie rien alors quelle devrais renvoyer temp sous darck basic un language de programmation de jeu elle renvoie rien alors que mon message box marche.

je vais voir pour renvoyer le pointeur de la variable je pourais peut etre le recupere.
Messages postés
91
Date d'inscription
samedi 30 mars 2002
Statut
Membre
Dernière intervention
11 octobre 2005

déclare static ta variable temp. static char temp[256]. Ou alor écris dans un fichier et vien lire ton fichier.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Dans tes fonctions ecrire et lire, tu dois passer des tableau de char, un tableau de char etant en fait l'adresse du premier element de ce tableau.
N'oublie pas non plus de spécifié que se sont des const.

Soit :

int __declspec (dllexport) ecrire(const char section[], const char cle[], const char valeur[], const char fichier[])
{
WritePrivateProfileString(section,cle,valeur,fichier);
}

char* __declspec (dllexport) lire(const char section[], char cle[], const char fichier[])
{
char *temp ;

GetPrivateProfileString(section,cle,"",temp,sizeof(temp),fichier);

MessageBox(NULL,temp,"teste",1);

return temp;
}

Shell
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008

merci pour ton aide mais j'ai enfin finalement trouver et c'ets pas la peine de metre en constante les variable mon probleme de renvoie est que sous dbpro j'effacer l'ecrans juste a pres l'affichage mais avant le rafrechisement de l'ecrans don on voyais rien maintenant tous marche merci encore
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
J'oubliais aussi,
C'est normal que ta fonction ne renvoie rien, étant donné que temp est un pointeur declarée dans ta fonction.

A la sortie de ta fonction tu ne sais pas ce que vaut temp a l'adresse indiquée.
C'est risqué de faire des pointeurs comme ceci.
De plus ton pointeur n'est pas initialisé, tu risques a tout les coups d'avoir des effets de bord.

Les pointeurs de fonction sur char, c'est pas l'idéale, et a véviter au maximum.

Shell
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008

ben voila mon code final

#include <windows.h>


int __declspec (dllexport) ecrire(char *section,char *cle,char *valeur,char *fichier)
{
WritePrivateProfileString(section,cle,valeur,fichier);
}

char* __declspec (dllexport) lire(char *section,char *cle,char *fichier)
{

char temp[256] ;

GetPrivateProfileString(section,cle,"",temp,sizeof(temp),fichier);

return temp;
}

et sa renvoie bien une chaine et pas le pointeur.
donc voila mais merci quand meme maintenant tous vas bien
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Je te conseille et j'insiste meme en te disant de mettre des const char maVariable[].
Il faut prendre l'habitude de faire les choses proprement.

Ce n'est pas parcequ'un programme compile et affiche le résultat souhaités, qu'il marche.

Il se lance et s'execute certes, mais ne s'execute pas proprement.
Pour exemple il y a les fuites mémoires.

Shell
Messages postés
1536
Date d'inscription
samedi 21 décembre 2002
Statut
Membre
Dernière intervention
24 mai 2009
2
temp sera 'alloué' sur la pile, et tu risque de renvoyer n'importe quoi, je te conseille d'allouer dynamiquement temp, par un pointeur passé en param :

char* __declspec (dllexport) lire(char *section,char *cle,char *fichier, char *temp)
{
temp = malloc(...);

...

return temp; //(pas nécessaire puis ce que tu as deja le pointeur dans la fonction appelante)
}

Et dans ta fonction appellante, tu fais un free() des que besoin.
Une autre solution, passer un pointeur ayant deja été alloué dans la fonction appellante.

+2(p - n)
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
AlexMan> C'est ce que je lui ai conseillé de faire plus haut ... Il a la tete dur, il me dis c'est bon ca marche comme j'ai fais.

bebou007> Prend l'habitude de coder proprement. N'hésites pas non plus a ouvrir des bouquins de C notamment celui de K&R.

Shell
Messages postés
10
Date d'inscription
vendredi 17 septembre 2004
Statut
Membre
Dernière intervention
11 juin 2008

vous m'embrouiller tous je comprend rien a rien je debut dans le c++ alors bon faut pas me dire fait comme sa est comme sa j'y comprend rien.

deja je croyas que char *mavariable etais une variable donc on ne sais pas la taille que on vas lui metre.

aparament c'est une pointeur sur une variable de type char.

ensuite sa sert a quoi de metre const car cher moi const sa veut dire constante et une constante je vois pas se que sa vien faire la enfin faut dire que je debute donc je connais pas trop le c++.

puis

return temp; //(pas nécessaire puis ce que tu as deja le pointeur dans la fonction appelante)

donc quand j'appellerais ma fonction dans mon programme faudras que je met un pointeur?
si oui je doit faire un variable dans mon programme puis demander le pointeur pour le metre en parametre?
si non qu'est se que je doit metre en parametre?
car si je met un pointeur c'est que ma variable sera alouer donc pourquoi realouer de la memoire je comprned pas trop.

si vous voulais me donner des conseil expliquer moi pourquoi vous me dite voila faut faire comme sa je fait pas les choses comme sa parce que c'est comme sa je les fait parce que je comprend.

donc si quelqun a le temp de m'expliquer je vous demande de faire le code comme il devrais etre et m'expliquer je sais vous aller me repondre tu veut pas que l'on te fasse tous le boulot aussi non juste que sa fait 10 ligne au max est que sa vous prendras moin de temp a faire comme sa plutot que je vous fasse repete.

donc merci a selui qui m'expliquera et merci a tous quand meme.

maintenant ma fonction marche et j'ai pas de probleme pour le moment.