import ctypes
from ctypes import *
lll=ctypes.cdll.LoadLibrary
lib = lll("./libpycall.so")
fun=lib.init
fun.restype = c_int
print(fun(8))
print("*" * 20)
fun=lib.is_inited
fun.restype = c_bool
print(fun())
print("*" * 20)
fun=lib.str2
src = c_char_p()
src.value = "hello world ".encode("utf-8")
dest = "*" * 30
dest = dest.encode('utf-8')
num = fun(src, dest, len(dest))
if num != 0:
print(dest[:num])
else:
print("buf is not ok")
print("*" * 20)
print(lib.add(1, 2))
print("*" * 20)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class PythonTest{
public:
PythonTest():_is_inited(false), _num(0){
}
int init(int num){
_num = num;
_is_inited = true;
printf("inited ok\n");
return 0;
}
int str2(char *src, char* dest, int len){
if (src == NULL || len <= 0){
return 0;
}
int src_len = strlen(src);
int num = snprintf(dest, len, "%s%s", src, src);
return (num < len -1)? num:0;
}
bool is_inited(){
printf("_num = %d\n", _num);
return _is_inited;
}
private:
bool _is_inited;
int _num;
};
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
class PythonTest{
public:
PythonTest():_is_inited(false), _num(0){
}
int init(int num){
_num = num;
_is_inited = true;
printf("inited ok\n");
return 0;
}
int str2(char *src, char* dest, int len){
if (src == NULL || len <= 0){
return 0;
}
int src_len = strlen(src);
int num = snprintf(dest, len, "%s%s", src, src);
return (num < len -1)? num:0;
}
bool is_inited(){
printf("_num = %d\n", _num);
return _is_inited;
}
private:
bool _is_inited;
int _num;
};
gcc pycall_so.cpp -shared -fPIC -o libpycall.so