По сути, у меня есть функция C, которая печатает определенные числа, и я также хочу, чтобы функция возвращала 2 значения. Я попробовал это с помощью struct
, но я не сделал это правильно, и я не уверен, как поступить. Я прочитал другие вопросы и понимаю, что было бы лучше использовать указатель, но я не уверен, как это сделать.
Мой код C выглядит следующим образом:
struct re_val
{
double predict_label;
double prob_estimates;
predict_label = 5.0;
prob_estimates = 8.0;
};
int c_func(const char* dir, double a, double b, double c, double d)
{
double x[] = { a, b, c, d };
printf("x[0].index: %d \n", 1);
printf("x[0].value: %f \n", x[0]);
printf("x[1].index: %d \n", 2);
printf("x[1].value: %f \n", x[1]);
printf("x[2].index: %d \n", 3);
printf("x[2].value: %f \n", x[2]);
printf("x[3].index: %d \n", 4);
printf("x[3].value: %f \n", x[3]);
return re_val;
}
В конечном счете, я хотел бы вызвать только одну функцию, которая может распечатать массив и вернуть predict_label
и prob_estimates
.
Я на самом деле вызываю эту функцию в python через ctypes, и моя функция python включена ниже.
calling_function = ctypes.CDLL("/home/ruven/Documents/Sonar/C interface/Interface.so")
calling_function.c_func.argtypes = [ctypes.c_char_p, ctypes.c_double, ctypes.c_double, ctypes.c_double, ctypes.c_double]
calling_function.c_func.restype = ctypes.c_double
y = calling_function.c_func("hello",1.1, 2.2, 3.1, 4.2)
print y