python 2.5 + SWIG wie mit "char *" umgehen?

Python in C/C++ embedden, C-Module, ctypes, Cython, SWIG, SIP etc sind hier richtig.
Antworten
mantus
User
Beiträge: 17
Registriert: Freitag 4. Dezember 2009, 09:08

hi in meiner C API gibt es eine menge buffer die über (char *xx, length) übergeben werden.

bisher hab ich das unter python 2.6 einfach über
%pybuffer_mutable_string(char *pErrorString) gelöst

dann habe ich einfach anstelle des char *pErrorString eine bytebuffer übergeben.
in 2.5 gibt es keine bytebuffer :/ wie mach ich das jetzt?
ich hab an der .i datei nichts geändert, und anstelle eines bytearray habe ich self.errorBuffer = ('c'),[] verwendet, jetzt bekomme ich aber beim aufruf einen Fehler

Code: Alles auswählen

TypeError: in method 'TAL_GetErrorString', argument 2 of type '(char *pErrorString, SIZE)'
ich hab versucht da irgendwie typemaps dafür zu finden, die beziehen sich aber alle auf python 2.6 und bytearrays :/ aber das muss doch auch ohne bytearrays möglich sein? wie ging das bei 2.5?
mantus
User
Beiträge: 17
Registriert: Freitag 4. Dezember 2009, 09:08

Oder anders gefragt, was würdet ihr in python2.5 anstelle der bytebuffer benutzen?
ich benötige buffer auf byte granularität, eben als ersatz für "char *data, length"
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

Hey Mantus,

ich kann dir leider nicht ei deinem Problem weiterhelfen.

vielleicht bissl mehr code?

Aber, du hast scheinbar Python 2.6 mit swig laufen gehabt.
Welche version von swig?

Bei meinem Projekt hatte ich Probleme mit P2.6 und swig1.3.x, da war ein Bug im kompilier script.

Viel Glueck mit deinem Problem
Thomas
mantus
User
Beiträge: 17
Registriert: Freitag 4. Dezember 2009, 09:08

evtl kann mir ja einer allgemein weiterhelfen

ich habe folgende C funktion
TAL_ReturnType TAL_GetErrorString (TAL_SessionHandleType sessionHandle, char
*pErrorString, uint16 nErrorStringMax, TAL_Boolean *pIsErrorPresent)

und muss diese für python 2.5 wrappen ...

wie müsste der interface code für swig aussehen?
wie würde ihr das ganze in python dann einbinden?

ich schaffe es einfach nicht das es so funktioniert wie es soll.

bis jetzt hab ich folgendes versucht .... also erstmal garkeinen speziellen wrapper code.

session funktioniert,
pIsErrorPresent lege ich mit einer Pointerfunction an, geht auch problemlos.
aber beim Errorstring hab ich ständig Probleme :/
unter 2.6 war das kein Problem, da hab ich einfach überall bytearrays verwendet, und das hat eigentlich alles tadellos funktioniert.
Antworten