Passing a memory address (pointer) to an extension?

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Wed Oct 22 23:13:36 EDT 2008


En Wed, 22 Oct 2008 19:10:27 -0200, Philip Semanchuk  
<philip at semanchuk.com> escribió:

> I'm writing a Python extension in C that wraps a function which takes a  
> void * as a parameter. (The function is shmat() which attaches a chunk  
> of shared memory to the process at the address supplied by the caller.)  
> I would like to expose this function to Python, but I don't know how to  
> define the interface.
>
> Specifically, when calling PyArg_ParseTuple(), what letter should I use  
> to represent the pointer in the format string? The best idea I can come  
> up with is to use a long and then cast it to a void *, but assuming that  
> a long is big enough to store a void * is a shaky assumption. I could  
> use a long long (technically still risky, but practically probably OK)  
> but I'm not sure how widespread long longs are.

Are you *really* sure you want to supply a specific address argument? Most  
of the time (if not always, unless you're doing really low level stuff) a  
NULL is perfectly adequate.
Anyway, if it's going to be called from Python, the argument will be a  
Python integer (or long) object); you may get the value using  
PyInt_AsSsize_t

-- 
Gabriel Genellina




More information about the Python-list mailing list