Seite 1 von 1

Was stimmt mit dem Pointer nicht bei der Rückgabe..

Verfasst: Freitag 5. November 2010, 19:21
von funkheld
Bei 1 wird von der pp-Adresse + 4 ein Wert geholt >> der stimmt auch
Bei 2 wird nach der pp-Adresse +4 ein Wert übergeben
Bei 3 wird von der pp-Adresse + 4 der neue Wert geholt >> der stimmt auch
Bei 4 mit ord(s[4]) kommt der von Punkt 1 , also nicht der neue Wert

Was ist denn jetzt los???...hm...
Kann man den Speicher nur lesen

Code: Alles auswählen


import os
from ctypes import *

dl = cdll.LoadLibrary("pydll.dll")
laenge=os.path.getsize("cpc.bin")

print
print laenge," byte lesen"
print

f=open("cpc.bin", "rb")
s = f.read(laenge)

for j in s:
    print ord(j)

pp=pointer(create_string_buffer(s,laenge))

bb=dl.hole(pp,4)       >>>> 1
print bb (wert=188)

dl.gebe(pp,4)          >>>>> 2
(wert=99)

bb=dl.hole(pp,4)      >>>>> 3
print bb(wert=99)

print ord(s[4])         >>>>> 4
(wert=188)
Hier die Proceduren:

Code: Alles auswählen

ProcedureCDLL.c hole(*adr.l,rel.l)
  wertc = PeekB(*adr+rel)
  ProcedureReturn wertc
EndProcedure

ProcedureCDLL gebe(*adr.l,rel.l)
  PokeB(*adr+rel,99)
EndProcedure

Re: Was stimmt mit dem Pointer nicht bei der Rückgabe..

Verfasst: Freitag 5. November 2010, 19:27
von BlackJack
@funkheld: Du musst den Wert aus dem Stringbuffer holen, denn der wurde verändert und nicht `s`. Zeichenketten sind in Python unveränderbar.

Re: Was stimmt mit dem Pointer nicht bei der Rückgabe..

Verfasst: Freitag 5. November 2010, 21:47
von Xynon1
Und zum zigsten mal:

Datein öffnet man mit

Code: Alles auswählen

with open(...) as handle:
,
und wenn man sie schon so öffnet wie du, dann musst du sie auch danach schließen.