Verfasst: 15.03.2007 14:40
Ich habe endlich und nachweisbar den Fehler lokalisiert:
Dieser Link brachte mich auf die richtige Spur:
http://www.winehq.org/pipermail/wine-de ... 00530.html
In einem Posting bezogen auf WineMine schreibt davep:
als Puffergröße mit MemorySize(Mem) + SizeOf(Character) zu der Puffergröße auch noch 1 Byte bei ASCII bzw. 2 Byte bei Unicode dazu addiert, was natürlich falsch ist. Nur bei der Angabe der String-Länge müßte noch das/die Null-Abschlußbyte(s) mit angegeben werden...
Korrigiert werden müßten daher in der PBOSL_Registry-Bibliothek folgende beiden Zeilen:
Wie in meinem ersten Posting beschrieben ist die Puffergröße zu klein:
muß abgeändert werden in
Und der Puffergrößenwert muß korrigiert werden. Statt
muß diese Zeile verwendet werden:
Auch das von PureBasic4.0 beschriebene Problem bei dem nacheinander erfolgenden Schreiben von 3 Schlüsseln ist damit beseitigt!
Tut mir leid, daß die ganze Sache so lange gedauert hat, aber alle bisherigen Postings von mir hatte ich wirklich getestet, und sie liefen danach auch wirklich wiederholt stabil. Sogar die Fehler ließen sich immer wieder reproduzieren (außer nach ts-softs letztem Posting
). Wahrscheinlich liegt dies an der Registry, sodaß nach mehrfachem Schreiben und Löschen eines Schlüssels der Eintrag zufällig genau paßte und deshalb kein Fehler mehr auftrat. Ich habe so etwas in meiner ganzen 26-jährigen Programmierpraxis noch nicht erlebt... 
Dieser Link brachte mich auf die richtige Spur:
http://www.winehq.org/pipermail/wine-de ... 00530.html
In einem Posting bezogen auf WineMine schreibt davep:
Und wenn man sich ts-softs Prozedur Reg_WriteMultiLineString() anschaut, sieht man, daß er beim Aufruf vondavep hat geschrieben: The problem here is that the 'count' parameter passed to RegSetValueEx is not the string length but the size of the entire buffer.
Code: Alles auswählen
Error = RegSetValueEx_(hKey, ValueName, 0, #REG_MULTI_SZ, Mem, MemorySize(Mem) + SizeOf(Character))

Korrigiert werden müßten daher in der PBOSL_Registry-Bibliothek folgende beiden Zeilen:
Wie in meinem ersten Posting beschrieben ist die Puffergröße zu klein:
Code: Alles auswählen
Mem = AllocateMemory((MemoryStringLength(@Value) + 1) * SizeOf(Character))
Code: Alles auswählen
Mem = AllocateMemory((MemoryStringLength(@Value) + 2) * SizeOf(Character))
Code: Alles auswählen
Error = RegSetValueEx_(hKey, ValueName, 0, #REG_MULTI_SZ, Mem, MemorySize(Mem) + SizeOf(Character))
Code: Alles auswählen
Error = RegSetValueEx_(hKey, ValueName, 0, #REG_MULTI_SZ, Mem, MemorySize(Mem))

Tut mir leid, daß die ganze Sache so lange gedauert hat, aber alle bisherigen Postings von mir hatte ich wirklich getestet, und sie liefen danach auch wirklich wiederholt stabil. Sogar die Fehler ließen sich immer wieder reproduzieren (außer nach ts-softs letztem Posting

