GetPrivateProfileSection

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

GetPrivateProfileSection

Beitrag von jpd »

Hi All,

ich habe ein kleines problem ...

über diesen API aufruf ist es möglich die "sektion" einer ini-datei auszulesen... und in einen string zu übergeben!

The format of the returned keys and values is one or more null-terminated strings, followed by a final null character

z.b.
  • [section_1]
    value1=1
    test=4
    value2=2
    value3=3

Code: Alles auswählen

buffer.s=Space(32767)
size.l=32767
sect.s="section_1"
path.s="C:\test\config.ini"
result.l =GetPrivateProfileSection_(@Sect, @Buffer, size, Path)

Debug buffer
mein problem ist das buffer nicht alle zeile beinhaltet ...
value1=1 test=4 value2=2 value3=3
sondern nur die erste
value=1

meine frage ist natürlich ....
was mache ich falsch?


Grüsse

JPD

anbei die infos über diesen api aufruf im MSDN:


DWORD GetProfileSection(
LPCTSTR lpAppName, // address of section name
LPTSTR lpReturnedString, // address of return buffer
DWORD nSize // size of return buffer
);

Parameters
lpAppName
Pointer to a null-terminated string containing the section name in the WIN.INI file.
lpReturnedString
Pointer to a buffer that receives the keys and values associated with the named section. The buffer is filled with one or more null-terminated strings; the last string is followed by a second null character.
nSize
Specifies the size, in characters, of the buffer pointed to by the lpReturnedString parameter.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Statt eines Stringbuffers solltest Du Allocate Memory verwenden und anschießend z.B. Byteweise auslesen, bis 2 Chr(0) vorhanden waren. Danach kannste mit Stringfield oder sonstwas weiterarbeiten um an alle Werte zu kommen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Hallo Ts-soft,
habe allocate memory verwendet ...

mit den gleichen ergebniss! nur
die erste zeile der section werden ausgelesen ...

habe ich das richtig umgesetzt?

Vielen Dank
JPD

Code: Alles auswählen

size.l=32767
*MemBuffer = AllocateMemory(size) 

sect.s="section_1"
path.s="C:\test\config.ini"
result.l =GetPrivateProfileSection_(@Sect, *MemBuffer, @size, Path)

Debug Membuffer
 Debug Result
 
 String$ = PeekS(*MemBuffer, result)
Debug string$
 FreeMemory(MemBuffer) 
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Vielleicht so ?

Code: Alles auswählen

size.l=32767 
*MemBuffer = AllocateMemory(size) 

Sect.s = "section_1"
Path.s = "C:\test\config.ini"
Result.l =GetPrivateProfileSection_(@Sect, *MemBuffer, size, @Path)

Debug *Membuffer 
Debug Result 

Repeat
  String$ = PeekS(*MemBuffer, result)
  Debug String$
  *MemBuffer + Len(String$) + 1
Until String$ = ""
FreeMemory(*MemBuffer)
Benutzeravatar
jpd
Beiträge: 380
Registriert: 14.02.2005 10:33

Beitrag von jpd »

Ja, super... :allright:

ich denke mit meine programmierung künste muss ich noch einiges dran machen ...

üben üben üben ....

wichtig ist das es spass macht :)


Danke
JPD
Antworten