API WritePrivateProfileString

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Specht

Betreff: API WritePrivateProfileString

BeitragFr, Dez 17, 2004 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, ich würde gern mit Blitz3D Daten in ein Ini-File schreiben.

Dazu gibt es ja obenstehende API (habe ich schon oft mit VB benutzt).

Habe mir die Userlibs aus dem Forum hier gezogen, jetzt funktioniert das ganze aber nicht so richtig. Sad

Hier ein Beispiel:

In der Userlib:
Code: [AUSKLAPPEN]

api_WritePrivateProfileString% (lpApplicationName$, lpKeyName*, lpString*, lpFileName$) : "WritePrivateProfileStringA"


Was genau heißen die Sternchen bei den Parametern?
Und was bringt der Parameter Application?

Mein Quellcode:
BlitzBasic: [AUSKLAPPEN]

TestApp = \"MyProg\"
Testkey = \"a\"
Teststring = \"b\"
result% = api_WritePrivateProfileString(TestApp, Testkey, Teststring, \"c:\test.ini\")


Beim Ausführen kommt dann immer Memory Access Violation.

Vielleicht könnt ihr mir helfen?

Jan_

Ehemaliger Admin

BeitragFr, Dez 17, 2004 11:32
Antworten mit Zitat
Benutzer-Profile anzeigen
* = Bank
%= Integer
$ = String
# = Float

die win api kommt nicht, mit den BB Strings zurande.
between angels and insects
 

D²O

BeitragFr, Dez 17, 2004 11:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Soweit ich noch weis, erwartet die funktion bei den Sternchen einen Pointer.
BB/+/3D kann aber keine Pointer übergeben, bzw. hat keine Pointer.


Aber warum schreibst Du nicht einfach mit Writeline/String in die INI Datei?

Ansonsten, schaumal in FAQ oder Code bereich, das müsste auch ein beispiel drin sein für INI Dateien.


Edit:
Oh, Jan_ war schneller, hmm, das mit Bank könnte auch gehen.
Blitz+; Blitz3d; BlitzMax; GLBasic; Purebasic;
GameMaker Studio 1.4xx; AGK;

Jan_

Ehemaliger Admin

BeitragFr, Dez 17, 2004 11:39
Antworten mit Zitat
Benutzer-Profile anzeigen
@d²o, bei Banks, kommst du an die Pointer herran.
between angels and insects
 

Specht

BeitragFr, Dez 17, 2004 11:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Und wie kann man das jetzt in B3D hinkriegen?

Wie ist das mit Banks?

Werde auch nochmal nach einem Beispiel suchen.

simi

BeitragFr, Dez 17, 2004 18:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Also, du kannst nur Pointer von Banks überfgeben...
Das hesst du musst Testkey und Teststring mit einer Bank übergeben:
BlitzBasic: [AUSKLAPPEN]

TestApp = \"MyProg\"
Testkey = CreateBank(2):PokeByte Testkey,Asc(\"a\"),1:PokeByte Testkey,0,2
Teststring = \"b\" ;Das gleiche auch hier
result% = api_WritePrivateProfileString(TestApp, Testkey, Teststring, \"c:\test.ini\")


Ich weiss nicht genau ob du das 0-Byte auch angeben musst, einfach mal ausprobieren...

cu simi
 

Specht

BeitragFr, Dez 17, 2004 18:32
Antworten mit Zitat
Benutzer-Profile anzeigen
hab das schreiben hinbekommen, aber das lesen will jetzt nicht.

Folgender code:

BlitzBasic: [AUSKLAPPEN]

;Speicherplatz für Key reservieren
KeyBank = CreateBank(Len(Key$)+1)
For i = 0 To Len(Key$)-1
PokeByte KeyBank, i, Asc(Mid(Key$, i+1, 1))
Next
PokeByte KeyBank, i, 0

;Speicherplatz für Value reservieren
ValueBank = CreateBank(100)

value = api_GetPrivateProfileString(Section$, KeyBank, \"Default\", ValueBank, 100, IniFile$)


Bei Value kommt auch die richtige Anzahl der Zeichen heraus (z.B. 4 für 1234) aber in die bank wird nichts reingeschrieben. Sad

Beim DebugLog mit Peekbyte kommen immer nur 0er.

simi

BeitragFr, Dez 17, 2004 18:59
Antworten mit Zitat
Benutzer-Profile anzeigen
So, habs mir mal angeschaut...
BlitzBasic: [AUSKLAPPEN]

b1 = CreateBank(6):PokeString(\"Test2\",b1) ;Name der Sektion
b2 = CreateBank(2):PokeString(\"a\",b2) ;KeyNAme
b3 = CreateBank(1) ;Default String
b4 = CreateBank(9):PokeString(\"test.ini\",b4) ;DateiName
b5 = CreateBank(100) ;Rückgabe

x= api_GetPrivateProfileString(b1,b2,b3,b5,100,b4)

For i = 0 To x-1
z$=z$+Chr(PeekByte(b5,i))
Next

Notify z



Function PokeString(s$,b)
For x = 1 To Len(s)
PokeByte b,x-1,Asc(Mid(s,x,1))
Next
PokeByte b,x-1,0
End Function

Bei mir gehts...


Irgendwie ist auch die Definition, die du hast falsch. Alle Strings sind auch Pointer.....

Code: [AUSKLAPPEN]

api_GetPrivateProfileString% (lpApplicationName*, lpKeyName*, lpDefault*, lpReturnedString*, nSize%, lpFileName*) : "GetPrivateProfileStringA"


cu simi
 

Specht

BeitragFr, Dez 17, 2004 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
ok danke, werd morgen mal schauen. Die defnitionen waren beim dl dann wohl falsch Sad
 

OJay

BeitragFr, Dez 17, 2004 19:17
Antworten mit Zitat
Benutzer-Profile anzeigen
blubb:

Code: [AUSKLAPPEN]
; INI - handling routines using windows API

; Userlibs kernel32.decls
;.lib "kernel32.dll"
; GetPrivateProfileString%(lpApplicationName$,lpKeyName$,lpDefault$,lpReturnedString*,nSize%,lpFileName$):"GetPrivateProfileStringA"
; WritePrivateProfileString%(lpApplicationName$,lpKeyName$,lpString$,lpFileName$):"WritePrivateProfileStringA"

; read sample:
; Const INIFILE$=".\myini.ini"
; WindowsSize$=GetIniString(INIFILE,"Window","Size","Maximized")

; write sample
;SetIniString(INIFILE,"Window","Size",WindowsSize$)

; errorhandling sample
;If Not SetIniString(INIFILE,"Window","Size",WindowsSize$) Then ... (manage here your error)




Function SetIniString%(FileINI$, Section$, Key$, Value$)
  ; FileINI = file (must include path, for current dir use .\) to write into (eg: ".\myinifile.ini")
  ; Section$ = section that will include your key and value (eg: "GeneralSetup")
  ; Key$ = Key's name for the value (eg: "BackColor")
  ; Value$ = Value to write in Key (eg: "ff00ff")
  ; If the function succedeed it return True otherwhise False

  ; result in myinifile.ini:
  ; [GeneralSetup]
  ; BackColor=ff00ff

  Ret%=WritePrivateProfileString(Section$, Key$, Value$, FileINI$)
  If Ret% <> 1 Then
    Return False
  Else
    Return True
  End If
 
End Function

Function GetIniString$(FileINI$,Section$,Key$,DefaultValue$)
  ; FileINI = file (must include path, for current dir use .\) to read (eg: "c:\windows\myinifile.ini")
  ; Section$ = section where search your key (eg: "GeneralSetup")
  ; Key$ = Key's name to search (eg: "BackColor")
  ; DefaultValue$ = Value to return if key or file or section is not found (eg: "ff00ff")
  ; Function return value retrieved from searched Key or the user's default value

  myString$=""
  myBank=CreateBank(255)
  LenString%=GetPrivateProfileString(Section$, Key$, DefaultValue$, myBank, 255, FileINI$)
  For x=1 To LenString%
    myString$=myString$+Chr(PeekByte(myBank,x-1))
  Next
  FreeBank myBank
  Return myString$
   
End Function

bruZard

BeitragFr, Dez 17, 2004 19:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Wozu zur Hölle willst Du eine *.ini schreiben? Sollen etwa Third-Party Produkte auf diese Daten zugreifen? Wenn nicht: Schreibe einfach eine Textdatei ... oh Mann
PIV 2,4GHz - 1GB DDR 333 - ATI Radeon9600 - WinXP - DX9.0c - BMax 1.14 - B3D 1.91 - 1280x1024x32

User posted image
 

Specht

BeitragMo, Dez 20, 2004 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke OJay, funktioniert wunderbar!

@bruzard: Ja, wird von Thirdparty-Programmen verwendet und ist gegenüber normalen Textfiles auf jeden Fall von Vorteil, da

1. Übersichtlich strukturiert
2. Man muss sich nicht durch de einzelnen Zeilen kämpfen

=> äußerst komfortabel!

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group