SWIG/C++

Bill Davy Bill at SynectixLtd.com
Thu Apr 10 04:00:14 EDT 2008


Is there a better place to post such questions?

Anyway, in the hope it is something simple, I would appreciate some help.

I am adding some C++ code to Python.  From Python I want to be able to read 
data from a target device, over USB.  My software does all the hard work and 
I have a class:

class ViperUsbC
    {
    public:
    // snip snip
        ERROR_T ReadSlaveMemory(u8 Slave, u16 Offset, u8* pData, u16 
Length);
    // Snip,snip
    };

I use swigwin-1.3.34 to wrap it into a module called SHIP.

In Python, I have:

import SHIP
ViperUsb = SHIP.ViperUsbC()
Slave =7
Offset = 0
Length = 64
Buffer = 'a' * Length
print "type(Buffer)=%s" % type(Buffer)
print "len(Buffer)=%s" % len(Buffer)
Result = ViperUsb.ReadSlaveMemory(Slave, Offset, Buffer, Length);

That fails with:

type(Buffer)=<type 'str'>
len(Buffer)=64

Traceback (most recent call last):
  File "H:\Husky\HostPC\V1\SHIP\test1.py", line 1970, in -toplevel-
    ViperTests()
  File "H:\Husky\HostPC\V1\SHIP\test1.py", line 1884, in ViperTests
    Result = ViperUsb.ReadSlaveMemory(Slave, Offset, Buffer, Length);
  File "H:\Husky\HostPC\V1\SHIP\Release\SHIP.py", line 1757, in 
ReadSlaveMemory
    def ReadSlaveMemory(*args): return 
_SHIP.ViperUsbC_ReadSlaveMemory(*args)
TypeError: in method 'ViperUsbC_ReadSlaveMemory', argument 4 of type 'u8 *'


How do I provide a buffer into which to read the data?  It would not be 
intolerable to provide another layer using %extend, but I feel sure this 
should be automagic.

Thanks in advance
    Bill

PS This is a very small part of a much larger project so I cannot supply 
complete source code. 





More information about the Python-list mailing list