diff options
author | Alexandru Croitor <alexandru.croitor@qt.io> | 2017-09-11 13:36:35 +0200 |
---|---|---|
committer | Alexandru Croitor <alexandru.croitor@qt.io> | 2017-11-06 08:30:27 +0000 |
commit | 764498b3d033a1c947a40dc1b2237e81b674992b (patch) | |
tree | 9245056c6f5cbc9b85bf942d2b74dc9ca740627f /sources/shiboken2/shibokenmodule | |
parent | 8c9037dc83fbdbb0b9913961fbe7f84066630e18 (diff) |
Implement proper void pointer (void*) support
This change introduces a new type into the shiboken2 module which is
imported by calling "import PySide2.support.VoidPtr".
The type takes care of conversions from / to void* values in function
signatures.
Creating an instance can be done by passing either a shiboken wrapped
object, or an integer representing an address, or a python object that
implements the buffer interface.
For example, this is useful for passing numpy arrays to C OpenGL
functions that take void* parameters. First you convert the array into
a bytestring (using numpy.array.tobytes(), then you instantiate a
VoidPtr from that bytestring, and finally you pass it along to a GL
function.
One corner case that is currently not supported is void** parameters.
Change-Id: I01e291d6856cb6bd8b5175adc3ead6b728036535
Reviewed-by: Christian Tismer <tismer@stackless.com>
Diffstat (limited to 'sources/shiboken2/shibokenmodule')
-rw-r--r-- | sources/shiboken2/shibokenmodule/CMakeLists.txt | 5 | ||||
-rw-r--r-- | sources/shiboken2/shibokenmodule/typesystem_shiboken.xml | 3 |
2 files changed, 8 insertions, 0 deletions
diff --git a/sources/shiboken2/shibokenmodule/CMakeLists.txt b/sources/shiboken2/shibokenmodule/CMakeLists.txt index 31b98132d..f2d7b30f2 100644 --- a/sources/shiboken2/shibokenmodule/CMakeLists.txt +++ b/sources/shiboken2/shibokenmodule/CMakeLists.txt @@ -8,11 +8,16 @@ set(sample_SRC ${CMAKE_CURRENT_BINARY_DIR}/shiboken2/shiboken2_module_wrapper.cpp ) +set(shibokenmodule_TYPESYSTEM +${CMAKE_CURRENT_SOURCE_DIR}/typesystem_shiboken.xml +) + add_custom_command(OUTPUT ${sample_SRC} # Note: shiboken2 is an executable target. By not specifying its explicit # path, CMAKE figures it out, itself! # This fixes an issue with Visual Studio, see https://github.com/PySide/shiboken2/pull/11 COMMAND shiboken2 --project-file=${CMAKE_CURRENT_BINARY_DIR}/shibokenmodule.txt ${GENERATOR_EXTRA_FLAGS} +DEPENDS ${shibokenmodule_TYPESYSTEM} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMENT "Running generator for 'shiboken2'..." ) diff --git a/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml b/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml index 18ab52e80..bdb0c9338 100644 --- a/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml +++ b/sources/shiboken2/shibokenmodule/typesystem_shiboken.xml @@ -105,6 +105,7 @@ <extra-includes> <include file-name="sbkversion.h" location="local"/> + <include file-name="voidptr.h" location="local"/> </extra-includes> <inject-code position="end"> // Add __version__ and __version_info__ attributes to the module @@ -116,5 +117,7 @@ PyTuple_SET_ITEM(version, 4, PyInt_FromLong(SHIBOKEN_SERIAL)); PyModule_AddObject(module, "__version_info__", version); PyModule_AddStringConstant(module, "__version__", SHIBOKEN_VERSION); + + VoidPtr::addVoidPtrToModule(module); </inject-code> </typesystem> |