Создаю простейшую с помощью MinGW dll с двумя функциями:
#include <windows.h>
extern "C" __declspec(dllexport) void SomeFunction(double data)
{
if (data < 0)
MessageBoxA(0, "less than zero", "DLL Message", MB_OK | MB_ICONERROR);
}
extern "C" __declspec(dllexport) void EmptyFunction()
{
MessageBoxA(0, "EmptyFunction", "DLL Message", MB_OK | MB_ICONERROR);
}
Затем пытаюсь запустить с помощью скрипта:
from ctypes import *
from ctypes.wintypes import*
EmptyFunction = WINFUNCTYPE(None)(
("EmptyFunction", windll.first_dll))
SomeFunction = WINFUNCTYPE(None, c_double)(
("SomeFunction", windll.first_dll), ((1, "data", 0.0),))
EmptyFunction()
SomeFunction(-1.0)
Так вот EmptyFunction срабатывает без проблем, а SomeFunction тоже срабатывает, MessageBox выдается с учетом знака, но после неё выдаётся исключение:
Traceback (most recent call last):
File "....py", line 11, in <module>
SomeFunction(-1.0)
ValueError: Procedure probably called with too many arguments (8 bytes in excess)