Swig

SWIG: en écrivant quelques lignes de C/C++ supplémentaire, Swig permet ensuite de créer un module/lib (dll, so, pyd) python qui permet d'interfacer le code C/C++.

Un tuto, un peu vieux mais intéressant néanmoins :
http://matthieu-brucher.developpez.com/tutoriels/python/swig-numpy/

Mes quelques soucis pour compiler/linker sous Win7: https://stackoverflow.com/questions/45279541/swig-and-mingw-64-to-use-with-python-not-a-valid-win32-application

Site officiel: http://swig.org
pour l'installation sous ubuntu: https://doc.ubuntu-fr.org/swig

Comparatif avec d'autre solutions: https://stackoverflow.com/questions/456884/extending-python-to-swig-not-to-swig-or-cython#456949

Exemple avec le pompage (lmapc104)

Étape 1

dans une commande (cmd) “dos”:
C:\workspace\pompageGC\src>

C:\Users\pompage\Downloads\swigwin-3.0.12\swig.exe -python -c++ pompage.i

qui crée les fichiers src/pompage_wrap.cxx et src/pompage.py

On déplace pompage.py à la racine du projet:

$ mv src/pompage.py .

Étape 2

dans un terminal (mingw-64)(ds explorer windows, clic-droit sur le répertoire workspace\pompageGC\src puis “Git Basch here”) :
pompage@LMAPC104 MINGW64 /c/workspace/pompageGC (swig)

$ g++ -c -std=c++14 -D_hypot=hypot -DWIN32 src/*.cpp src/pompage_wrap.cxx -I./lib/ -I/C/Program\ Files\ \(x86\)/Python36-32/include

qui compile avec python, le -I./lib/ est pour le PComm.h (carte Moxa), -D_hypot=hypot pour la compatibilité avec Python 1) le https://stackoverflow.com/questions/10660524/error-building-boost-1-49-0-with-gcc-4-7-0

pompage@LMAPC104 MINGW64 /c/workspace/pompageGC (swig)

$ g++ -shared *.o /c/ProgramData/Anaconda3/python36.dll lib/PCOMM.LIB /c/Windows/System32/msvcr120.dll -L./lib/ -lpci-dask64 -o _pompage.pyd

qui réalise l'édition de liens (link) et crée les fichiers _pompage.pyd

Ces deux étapes peuvent être lancées plus simplement en tapant, depuis une fenêtre CLI mingw, et en étant dans le répertoire c:/workspace/pompageGC bash mf_pompage-py.sh
Si de nouvelles méthodes apparaissent dans myControler (fichiers pompage.hpp et cpp), l'étape 1 doit être à nouveau réalisée

Utilisation

à nouveau dans une commande “dos”, on teste:

C:\workspace\pompageGC\src>cd ..
C:\workspace\pompageGC>C:\ProgramData\Anaconda3\python.exe
Python 3.6.1 |Anaconda 4.4.0 (64-bit)| (default, May 11 2017, 13:25:24) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pompage
>>> mc = pompage.myControler("test", 1)
unable to open comport
taille fichier debuglog: 6145
>>> pression = mc.get_pression()
>>> pression
1000.0
>>>

ou pour exécuter le programme, lancer le batch:

runPython_pyqt_pompage.bat

Débugger C++/Swig/python: pdb et gdb !!
https://stackoverflow.com/questions/13178116/debugging-mixed-python-c-code-in-eclipse