赞
踩
最近使用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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。