RECHERCHER :
COMMUNAUTE MP
Identifiez vous ...
Devenir Membre
J'ai oublié mon MDP
DOMAINE MP
Bavardages
Langages Généraux
Langages Web
Langages DotNet
Autres langages
Dev. Jeux Video
Sécurité
Sys. Exploitation
Graphismes
Logiciels
Réseaux
Bases de données
Méthodologies
Emplois High-tech
Aide juridique
Articles juridiques
FORUM
Index des forums
Ajouter un sujet
Rechercher sujet
Contact Responsable
Devenir modérateur
CHAT MP IRC
Votre pseudo ...
Srv: irc.moteurprog.com
Chan: #MoteurProg
PARTICIPER
Plus de 3500 emplois.
Rechercher un job
Déposez votre CV
Emplois High-tech

Visiteur MP

 GetPrivateProfileString ?

Forum : ASSEMBLEUR
Sous Catégorie : Aucune
Type du sujet : Sujet Normale
FAQ : FAQ ASSEMBLEUR

SUIVI DES SUJETS PAR MAIL

SUIVI PAR MAIL INACTIF

RESOLUTION DU SUJET AJOUTER MENTION RESOLU
BLOQUAGE DU SUJET SUJET ACTIF
APPARTENANCE A LA FAQ N'APPARTIENT PAS A LA FAQ


PAGE : [1]

POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

FORUM ASSEMBLEUR

PREMIERE PAGE

PAGE PRECEDENTE

Page précedente

Page suivante

PAGE SUIVANTE

DERNIERE PAGE
Visiteur MP
Membre du club
Inscrit :
Messages : 1309
Message
#136648
Posté le 21/06/07 à 21:15
Bonjour,

Bon, le titre n'est pas bien explicite... Je vais essayé d'etre plus clair :

J'ai une appli qui charge le contenu d'un fichier ini avec l'API adequate (GetPrivateProfileString)

D'abord un un petit bout de code commenté :

push offset FichierIni ; Nom du fichier
push 48 ; Taille du buffer
push esi ; Adresse du buffer
push 0 ; Buffer par defaut
push offset FirstKey ; Adresse de la premiere Key
push offset Section ; Section
call GetPrivateProfileStringA
; ---> Recupere le texte associé à la premiere Key

Ce code est valable pour une entrée !!!
Si on a plusieurs entrées, Ou on fait une boucle ou on place chaque KEY dans nos data... Jusque la, pas de probleme...

Key1=Microsoft
Key2=Ibm
Key3=Apple

Ce code est valable que si on a definis le nombre d'entrée et la valeur de chaque entrées !!!
Dans l'exemple : 3 entrées, 3 valeurs predefinis

;--------------------------------------------------------------

Alors moi j'ai fait ca quand on ne sais pas à l'avance combien d'entree contiendra le fichier INI :

---> Je ne place aucune valeur dans le les data...
Je place juste un compteur dans le fichier INI (Des que l'utilisateur entre un nouvelle Key, j'incremente le compteur de 1)

Et je place cette valeur dans l'API à la place de OFFSET FIRSTKEY

Le probleme, c'est un byte ! Et la fonction n'attend pas autre chose...(String)
Si l'utilisateur a entrée plus de 255 valeur et bien on est dans la limite du byte et probleme !!!
Tant que l'incrementation ne va pas jusqu'a 255, tout va bien...

Donc comment aller au dela de 255 dans cette exemple ?

Oui, je sais, c'est pas clair du tout, je suis désolé :(

Je suis pret à etre plus clair, si j'ai un soupson de solution pour ce qui ont suivis...

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

Publicité
Inscrit : X
Messages : X
Message
#Aucun

HAUT DE PAGE

  

remi
Membre MP
Inscrit : 27/09/2004
Messages : 203
Message
#136651
Posté le 21/06/07 à 21:39
OFFSET FIRSTKEY est un Lp -> "Point to a null-terminated string that specifies the section containing the key name..."

Je ne comprends pas ton problème de "dépassement" byte Smiley

De plus cette famille d'API est deprecated et conservée uniquement pour la compatibilité 16bits... Et, apparement tu essaies de sortir du format INIT traditionel...

Tu devrais télécharger le dernier SDK: http://www.microsoft.com/downloads/details.aspx?FamilyId=E15438AC-60BE-41BD-AA14-7F1E0F19CA0D&displaylang=en
__________________________
www.rosasm.org/
www.quanta-it.com/easbell/RosAsmForum

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

Visiteur MP
Membre du club
Inscrit :
Messages : 1309
Message
#136806
Posté le 23/06/07 à 19:42
Salut Rémi,

En fait mon probleme n'est pas de savoir comment marche la fonction
Je sais bien que la fonction attends que l'on Push une chaine, etc...

Mon soucis est le suivant,

En admettant que dans le fichier INI, j'ai les données suivante :
- KeyFirst1=aaaa
- KeyFirst2=bbbb
- KeyFirst3=cccc
- KeyFirst4=dddd
- Etc...

Pour recuperer la valeur aaaa, on push KeyFirst1 dans la fonction et on recupere la donnée... Et ainsi de suite KeyFirst2, 3, 4, ...

Moi je voudrais recuperer les données de l'INI par une variable byte que je positionne à 1 et que j'incremente :
1=aaaa
2=bbbb
3=cccc
4=dddd
Etc...

Dans le code de recuperation je place un ADD Valeur de la Key pour recuperer l'ensemble des données...1, 2, 3, 4...

Boucle:

Push Fichier ini
..
.Push Compteur ---> compteur byte à la place d'une chaine !!!
..
Call GetPrivateProfileString
cmp eax, 0 ---> Fin de boucle
add Compteur, 1
jmp boucle

Dans cette exemple simpliste et si le fichier comporte - de 255 valeurs à recuperer, ca fonctionne parfaitement !
Mais comment recuperer plus de 255 valeurs sans etre obligé de faire :
key1=aaaa
key2=bbbb
key3=cccc
...
key255=gggg
...
key600=zzzz
... Etc

Voila le truc que je recherche ?

J'espere avoir été plus clair ;)

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE ALLER VOIR SON SITE

remi
Membre MP
Inscrit : 27/09/2004
Messages : 203
Message
#136807
Posté le 23/06/07 à 19:52
Je ne comprends pas le problème de limitation du contenu de Lp.

Si LpString est un pointeur sur une variable DWord (qui donc te permet de simuler ta chaîne asccii) et inc de D$Lpstring 256...
Tu devrais pouvoir passer to Lp pour des valeurs asscii de 0 a FFF.
Si cela nest pas suffisant: LpString sur un QWord et pareillement add 256 soir 0 à FFFFFFF etc.

Ceci dit, si tu dois utiliser absolument KeyFirst comme préfixe:


LpString = String+8

String "KeyFirst " 0
__________________________
www.rosasm.org/
www.quanta-it.com/easbell/RosAsmForum

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

bug3000
Nouveau membre
Inscrit : 24/02/2007
Messages : 10
Message
#136813
Posté le 23/06/07 à 21:09
---> Rémi,

Je vois que tu a tres bien compris mon soucis et ta reponse ma ouvert les yeux... Par moment, je vais trop dans la complication sans reflechir !

J'ai transformer mon compteur(dword) en string dans un buffer, j'incremente le compteur et je place le resultat du buffer dans la fonction...
Ca marche Impec !

Ce qui donne à vol d'oiseau :

mov count,1 --> Place le compteur à 1
Boucle:
mov eax, count
mov edi, offset buffer ---> Buffer pour la conversion
Call VERS MA ROUTINE DE CONVERSION (DWORD TO STRING)

..
..
..
Push Offset Buffer
..
call GetPrivate

cmp eax,0
je Quit

add compteur,1

jmp boucle
------------------------------------------

PS : Tout ca parceque dans mon prog, on ne sait pas à l'avance combien d'entrée comporte le fichier INI... C'est l'utilisateur qui entre les données !
Et que je ne veut pas ajouter 50 000 Buffer avec 50 000 data...


Merci à toi ;)

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 

remi
Membre MP
Inscrit : 27/09/2004
Messages : 203
Message
#136817
Posté le 23/06/07 à 21:31
J'ai l'impression que tu fais encore bien compliqué...Smiley

LpBuffer = ASCII -> "KeyFirst" 0 0 0 0 0

inc D$LpBuffer+12 (pour protéger ton dernier BYTE à 0 pour le zéro ended string.

Push LpBuffer et hop...
__________________________
www.rosasm.org/
www.quanta-it.com/easbell/RosAsmForum

HAUT DE PAGE

PROFIL MEMBRE LUI ECRIRE 
POSTER UN NOUVEAU SUJET REPONDRE A CE SUJET

PREMIERE PAGE

PAGE PRECEDENTE Page précédente

Page suivante

PAGE SUIVANTE DERNIERE PAGE

FORUM ASSEMBLEUR



    PAGE : [1]



.: Site Web développé par Yann Pingot et l'équipe MPWG avec www.evolvia-web.com :.