51 lines
1.9 KiB
Plaintext
51 lines
1.9 KiB
Plaintext
Cython Sample Code
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
NB - tested under Python 2.7 and Python 3.6 with Cython 0.29 with Visual Studio C compiler
|
|
but it should work for all versions of Python, Cython and C compiler. (We also tested the
|
|
32-bit code using MinGW).
|
|
|
|
If you are coding in Cython then you can link the Dinkey Pro/FD Runtime module directly to
|
|
your code (rather than having to call an external Python extension). See the notes for
|
|
Python sample code as to why this is preferable. Use:
|
|
|
|
dpwin32_coff.obj for 32-bit code
|
|
dpwin64.obj for 64-bit code
|
|
|
|
The source files in the project are:
|
|
|
|
File name Description
|
|
objtest.pyx main source code file for Cython containing protection functions
|
|
objtest.pxd implements the DRIS structure and function definitions
|
|
ddpro.h Used by the pxd file so we can call DDProtCheck (a hack because it is
|
|
difficult to declare a stdcall function in a pxd file)
|
|
setup.py python file to compile the Cython sample code
|
|
|
|
The sample code is just a guide. You should implement the protection in a stronger way
|
|
using the techniques described in the "Increasing your Protection" chapter of the manual.
|
|
|
|
NB - our sample code assumes that you are using 64-bit Python 3. If not then you will have
|
|
to make some small modifications to setup.py:
|
|
|
|
32-bit Python: modify extra_objects to list "dpwin32_coff.obj" instead of "dpwin64.obj"
|
|
|
|
Python 2: modify 'language_level' to be "2" (If you are using an old version of Python/Cython
|
|
you may have to modify the objtest.pyx code. e.g. "DEMO" instead of b'DEMO' and use
|
|
print instead of print()
|
|
|
|
To compile run the following command:
|
|
|
|
python setup.py build_ext --inplace --compiler=msvc
|
|
|
|
(for mingw32 use --compiler=mingw32)
|
|
|
|
So a makefile could look like this:
|
|
|
|
all:
|
|
python setup.py build_ext -c mingw32 --inplace
|
|
rm -rf ./build
|
|
rm -f *.c
|
|
|
|
Code marked with !!!! are places where you should customise the sample code so
|
|
that it will work properly:
|