On Thu, May 8, 2014 at 5:10 PM, Simon <simo...@gmail.com> wrote:
> I'd like to make a C memory buffer available inside Python via the Python 
> C/API without copying that memory into Python. How to do this? I've read [1] 
> but it's not clear that this functionality exists. In javascript it's 
> possible using String::NewExternal() [2].
>
> "Creates a new external string using the ASCII data defined in the given 
> resource.
>
> When the external string is no longer live on V8's heap the resource will be 
> disposed by calling its Dispose method. The caller of this function should 
> not otherwise delete or modify the resource. Neither should the underlying 
> buffer be deallocated or modified except through the destructor of the 
> external string resource."
>
> [1] https://docs.python.org/2/c-api/buffer.html
> [2] 
> http://izs.me/v8-docs/classv8_1_1String.html#a07c47bf675b802c550984fa24511a589

In 3.3 or greater you can create a memoryview directly from a char*
using this this call:
https://docs.python.org/3/c-api/memoryview.html#c.PyMemoryView_FromMemory

Otherwise, you can do it using the buffer protocol but it takes a
little more work than just a function call.  You'll need to define in
C an extension type that will wrap your C buffer and that implements
the buffer protocol, and then objects of that type can be used as the
basis for memoryviews (or other buffer consumers).
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to