Bonjour,
J'utilise array_class (dispo avec SWIG carray.i) avec succès pour déclarer un buffer ds Python et le remplir ds la dll C. Ensuite je suis capable de lire les valeurs de ce buffer ds mon code Python.
Faisant évoluer mon code, je rencontre un pb depuis qq jours. Quand je déclare un nouveau objet array_class ds Python (pReadingBufferLong = CommIP.longArray(iReadingBufferSize) ) Python plante et affiche la fenetre windows de plantage "Python exe encounter a pb and need to close..." .
J'ai 2 arrays globaux (2000 bytes et 20 bytes)
Ensuite j'utilise 2 arrays locaux pr récupérer les valeurs écrites par un autre PC via ma dll Cl. Python plante qd je déclare mon 2ème arrays local
Ci-dessous mon code et ma configuration.
Votre retour m'intéresse si qq'un rencontre le même pb ou utilise avec succès array_class et remarque une erreur ds mon code
Merci
Manu_13
in CommIP.i:
%include "carrays.i" // array_function not used
%array_class(S8, byteArray);
%array_class(S16, shortArray);
%array_class(S32, longArray);
%array_class(S64, longlongArray);
in ***.py :
def GetBufferPositionMsg(iIndex, PositionMsg, bUDP = False):
global COMIPbck_SizeBufferUDP
global COMIPbck_SizeBufferTCP
global COMIPbck_PosMessage
iBufferSize = COMIPbck_SizeBufferTCP
#1- Get element size
iElemSizeLong = ctypes.sizeof(ctypes.c_long)
#2- convert pReadingBuffer in a raw data buffer (char*)
pReadingBufferLong0 = CommIP.byteArray(iBufferSize)
pRawDataBufferLong = CommIP.cdata(pReadingBufferLong0, iBufferSize)
#3- Get raw data (from COMMIP dll)
iDataSizeInByte = CommIP.commIP_getBufferDataTCP(pRawDataBufferLong, iIndex, 0)
#4- copy data in appropriate buffer
iReadingBufferSize = iDataSizeInByte/iElemSizeLong
pReadingBufferLong = CommIP.longArray(iReadingBufferSize)
CommIP.memmove(pReadingBufferLong, pRawDataBufferLong)
#5- read value
PositionMsg.iLenght = pReadingBufferLong[0]
PositionMsg.lIndex = pReadingBufferLong[1]
return 1
#end GetBufferPositionMsg
Configuration :
Python 2.6
Boaconstructor 0.6.1
SWIG 1.3.40
OS Windows XP SP3
Partager