Спасибо CristiFati, предоставившей половину ответа.
Этот код теперь работает, обратите внимание, что функции библиотеки Clarion теперь прототипированы как @F ", поэтому код проще.
from ctypes import *
import _ctypes
@CFUNCTYPE(None)
def Test():
print ("Test here")
return
def SetUpDll():
print ("Setting read / write callback functions... Ptr=", sizeof(c_void_p), "bytes")
assert sizeof(c_void_p) == 4
ClaRTL = CDLL('./ClaRUN.dll')
MyDll = CDLL('./IC2_CommsServer.dll')
ClaRTL.AttachThreadToClarion.restype = None
ClaRTL.AttachThreadToClarion.argtypes = [c_int32]
ClaRTL.AttachThreadToClarion(1)
MyDll.SETTESTFUNC.restype = None
MyDll.SETTESTFUNC.argtypes = [CFUNCTYPE(None)]
MyDll.SETTESTFUNC (Test)
MyDll.CALLTESTFUNC.restype = None
MyDll.CALLTESTFUNC ()
_ctypes.FreeLibrary(MyDll._handle)
_ctypes.FreeLibrary(ClaRTL._handle)
print ("Done.")
SetUpDll()
Теперь вывод:
C:\Users\Derek\AppData\Local\Programs\Python\Python38-32\python.exe Z:/ps_IC2_dll/ps_IC2_dll.py
Setting read / write callback functions... Ptr= 4 bytes
Test here
Done.
Process finished with exit code 0