После этого я написал простую функцию C:
#include <stdio.h>
#include "main.h"// -> __declspec(dllexport) void compute_ncc(const int num_dims, const int *dims, const double *x, const double *y, double *z);
void compute_ncc(const int num_dims, const int *dims, const double *x, const double *y, double *z)
{
z[0] = 0.0;
printf("Bye - Bye world!!!\n");//also tried puts("Bye - Bye world!!!\n");
}
Вызвал функцию из консоли PyCharm (2018.3.7, Python 3.6), используя:
import ctypes
import numpy as np
lib = ctypes.cdll.LoadLibrary("D:/VISUAL_2015_PROJ/Compute_Costs_C/x64/Debug/Compute_Costs_C.dll")
fun = lib.compute_ncc
fun.restype = None
fun.argtypes = [ctypes.c_int32,
np.ctypeslib.ndpointer(np.int32, flags='C_CONTIGUOUS'),
np.ctypeslib.ndpointer(np.float64, flags='C_CONTIGUOUS'),
np.ctypeslib.ndpointer(np.float64, flags='C_CONTIGUOUS'),
np.ctypeslib.ndpointer(np.float64, flags='C_CONTIGUOUS')]
x = np.ones((1,3),dtype=np.float64)
y = np.ones((1,3),dtype=np.float64)
z = np.ones((1,3),dtype=np.float64)
fun(int(2),np.ones((1,3),dtype=np.int32),x,y,z)
Переменная z
изменилась следующим образом:
>>>z
array([[0., 1., 1.]])
, но я не вижу вывода printf
на консоли.
Есть идеи?