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

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

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
BlackJack

@funkheld: Du musst den Wert aus dem Stringbuffer holen, denn der wurde verändert und nicht `s`. Zeichenketten sind in Python unveränderbar.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

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.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Antworten