Ответ 1
Вероятно, вы перепутали вызывающие соглашения. Я предполагаю, что у вас функция C объявлена примерно так:
double haloshg_add(double d1, double s2)
{
return d1+d2;
}
По умолчанию используется соглашение о вызове C. Самый простой способ - изменить соглашение о вызове в коде ctypes:
nDLL = ctypes.CDLL('test.dll')
Если вы хотите изменить соглашение вызова в коде C на stdcall
(чтобы соответствовать ctypes.WinDLL
), вы должны сделать следующее:
double __stdcall haloshg_add(double d1, double s2)
Что бы вы ни делали, сделайте одно из этих изменений. Если вы сделаете оба, у вас будет обратный сбой!
Если бы это был я, я бы просто изменил код Python на использование соглашения о вызове C (используйте CDLL
). Это изменение имеет наименьшее влияние.