Bonjour,

Y a-t-il un moyen d'appeler à partir de Python 3.6 une DLL "maison" qui gère plusieurs autres threads?

Mes essais se sont soldés par un échec (là dans ma DLL j'essaye juste de créer 4 threads).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
lib = ctypes.CDLL(r'C:\RSI\SourcesC\CIAO_win\DEV_CIAO\x64\Release\DLLfromPython.dll')
lib.StartThread_ThreadManager.restype = ctypes.c_int
lib.StartThread_ThreadManager.argtypes = [ctypes.c_int]
retval = lib.StartThread_ThreadManager(4)
et j'obtiens ce genre d'erreur:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Trying to create 4 threads!
Traceback (most recent call last):
  File "C:\Python\Python36\lib\runpy.py", line 183, in _run_module_as_main
Thread 1, param->counter = 0
    mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
  File "C:\Python\Python36\lib\runpy.py", line 109, in _get_module_details
    __import__(pkg_name)
  File "C:\RSI\SourcesC\CIAO_win\DEV_CIAO\DLLfromPython\python_dll.py", line 49, in <module>
Thread 0, param->counter = 0
    retval = lib.StartThread_ThreadManager(4)
OSError: exception: access violation writing 0x0000000000000004
On voit que la DLL essaye de créer lesdits threads (là 2 sont apparemment créés en affichant "Thread N, param->counter = 0") mais après ça plante... Mon code C utilise CreateThread, et j'ai déclaré mes "HANDLES" de thread en variables globales (statiques ou non, ça donne le même résultat). De même le code du thread est déclaré comme "static DWORD".

Merci d'avance. G13