Я пытаюсь получить доступ к dll C++ из python (я новичок в Python). Я преодолел многие проблемы, связанные с вызовами, и, наконец, получил его для запуска без какой-либо ошибки компиляции/связывания. Однако, когда я печатаю возвращаемый массив из dll C++ в python, он показывает все случайные инициализированные значения. Похоже, что значения были неправильно возвращены.C++ DLL возвращает указатель, вызываемый из Python
Мой код на C++ выглядит следующим образом.
double DLL_EXPORT __cdecl *function1(int arg1, int arg2, double arg3[],int arg4,double arg5,double arg6,double arg7, double arg8)
{
double *Areas = new double[7];
....Calculations
return Areas;
}
Мой питон код выглядит следующим образом:
import ctypes
CalcDll = ctypes.CDLL("CalcRoutines.dll")
arg3_py=(ctypes.c_double*15)(1.926,1.0383,0.00008,0.00102435,0.0101,0.0,0.002,0.0254,102,1,0.001046153,0.001046153,0.001046153,0.001046153,20)
dummy = ctypes.c_double(0.0)
CalcDll.function1.restype = ctypes.c_double*7
Areas = CalcDll.function1(ctypes.c_int(1),ctypes.c_int(6),arg3_py,ctypes.c_int(0),dummy,dummy,dummy,dummy)
for num in HxAreas:
print("\t", num)
Выход оператора печати, как показано ниже:
2.4768722583947873e-306
3.252195577561737e+202
2.559357001198207e-306
5e-324
2.560791130833573e-306
3e-323
2.5621383435212475e-306
Любое предложение о том, что я делаю неправильно очень ценится.
Обратите внимание, что функции, возвращающие Структуры не всегда делают это так же, как для разных компиляторов (я узнал об этом на собственном горьком опыте) , Способ, которым ваш C++-компилятор возвращает такие структуры, может быть несовместим с тем, как ожидает ваша версия Python. –
http://stackoverflow.com/a/6731737/95954 –
Вероятно, лучше вернуть массив двойников, который был выделен с помощью 'malloc()', поэтому он может быть освобожден ctypes. –