最近使用Python调用c++动态库,下面简单介绍下几种常用方法
代码
-
参数是基本类型
-
extern "C" DLL_TEST_API int add(int a , int b);
-
def add(): add = dll.add add.argtypes = [c_int, c_int] add.restype = c_int res = add(c_int(1), c_int(2)) print(res)
-
-
参数是字符串
-
extern "C" DLL_TEST_API int show(const char* msg);
-
def show(): show = dll.show show.argtypes = [POINTER(c_char)] show.restype = c_int msg = bytes("hello world", "gbk") res = show(msg)
-
-
参数是结构体
-
struct Info { char* name; int age; }; extern "C" DLL_TEST_API int show_info(Info* msg);
-
class Info(Structure): _fields_ = [ ("name", c_char_p), ("age", c_int) ] def show_info(): show_info = dll.show_info show_info.argtypes = [POINTER(Info)] show_info.restype = c_int info = Info() info.name = bytes("wang san", "gbk") info.age = 20 res = show_info(byref(info))
-
-
返回结构体
-
extern "C" DLL_TEST_API Info* get_info(char* name , int age);
-
def get_info(): get_info = dll.get_info get_info.argtypes = [POINTER(c_char), c_int] get_info.restype = POINTER(Info) name = b"zhang san" res = get_info(name, c_int(10)) print("name:{0} age:{1}".format(res.contents.name.decode(), res.contents.age))
-
-
DLL 路径一定要写绝对路径,不要写相对路径。
-
Demo: https://download.csdn.net/download/haiyangyunbao813/16622511