First, create a simple dynamic library
Program to generate dll. so: gcc-fPIC-O2-shared dll. c-o dll. so
C file: dll. c:
#include <stdio.h>
struct param {
int a;
int b;
char c;
float f;
int arr[3];
};
void print0(struct param arg)
{
printf("in print:\n");
printf("a: %d\n", arg.a);
printf("b: %d\n", arg.b);
printf("c: %c\n", arg.c);
printf("f: %f\n", arg.f);
printf("arr: %d %d %d\n", arg.arr[0], arg.arr[1], arg.arr[2]);
}
void print2(struct param *arg)
{
printf("in print2 :\n");
printf("a: %d\n", arg->a);
printf("b: %d\n", arg->b);
printf("c: %c\n", arg->c);
printf("f: %f\n", arg->f);
printf("arr: %d %d %d\n", arg->arr[0], arg->arr[1], arg->arr[2]);
}
void print3(int a)
{
printf("in print3:\n");
printf("a: %d\n", a);
}
Python defines the struct passed to the dynamic library
From ctypes import *
Class ss (Structure ):
_ Fields _ = [
("A", c_int ),
("B", c_int ),
("C", c_char ),
("F", c_float ),
("Arr", c_int * 3), // defines an array
]
Python uses dll. so instances
# Loading a dynamic library
FileName = "/home/primax/Desktop/Work/Test/python/dll. so"
Lib = cdll. LoadLibrary (fileName)
# Defining variables
Param = ss ()
# Assign a struct Value
Param. a = 1
Param. B = 2
Param. c = 'A'
Partam. f = 1.2345
Param. arr [0] = 0
Param. arr [1] = 1
Param. arr [2] = 2
Lib. print0 (param)
Lib. print3 (2)
# Passing pointer to get pointer
Lib. print2 (pointer (param ))