python调用c/c++方法
2024-10-20 06:19:24
# python调用c/c++方法:一般先将c++代码转化为C类型dll(推荐使用静态dll,否则容易出现各种链接库问题;记得使用extern "C" _declspec(dllexport))
# extern "C" _declspec(dllexport) int iadd(int a ,int b)
# return a + b;
#
# extern "C" _declspec(dllexport) char* padd()
# return "test pythondll";
#
# extern "C" _declspec(dllexport) char* pxadd(char *p)
# return p;
# c++大数据量结果返回时候需要特殊处理
# CString gstrData;//全局变量释放
# extern "C" _declspec(dllexport) char* pcx_add(char *p)
# gstrData = CString(p);//p的内容超过1024字节以上推荐
# return (char*)gstrData.GetBuffer(0);
# extern "C" _declspec(dllexport) void py_ClearMenmory()
# {
# gstrData.ReleaseBuffer();
# }
class PythonDll:
def __init__(self):
if sys.maxsize > 2 ** 32:
pydll = ctypes.cdll.LoadLibrary(r'64.dll')
else:
pydll = ctypes.cdll.LoadLibrary(r'32.dll')
"""
1.int 类型
"""
pydll.iadd.restype = ctypes.c_int
idata = pydll.iadd(1, 2)
print(idata)
"""
2.char* 类型
"""
pydll.padd.restype = ctypes.c_char_p
pdata = pydll.padd()
print(pdata)
"""
3.char* 类型 参数char*
"""
pydll.pxadd.restype = ctypes.c_char_p
pdata = pydll.pxadd("test pythondll".encode(encoding="gbk"))
print(pdata)
"""
4.char* 类型 参数char* 中文需要转化
"""
pydll.pxadd.restype = ctypes.c_char_p
pdata = pydll.pxadd("测试 pythondll".encode(encoding="gbk"))
print(str(pdata, encoding="gbk"))
"""
5.char* 类型 参数char* 中文需要转化(返回值内容无限大)
"""
pydll.pcx_add.restype = ctypes.c_char_p
pdata = pydll.pcx_add("测试 pythondll..........".encode(encoding="gbk"))
print(str(pdata, encoding="gbk"))
pydll.py_ClearMenmory() # 释放内存
最新文章
- osgi学习
- hdu 1398 Square Coins(简单dp)
- resharper安装后,一不小心点错了(选择了object browser)
- 《Head First设计模式(中文版)》
- java中String类、StringBuilder类和StringBuffer类详解
- ztree使用系列四(ztree实现同级拖拽排序并将排序结果保存数据库)
- VIM小技巧之文件名补全
- Java二维码登录流程实现(包含短地址生成,含部分代码)
- solr group分组查询
- PCB板上镀镍厚度
- 算法笔记_014:合并排序(Java)
- Java中的向上造型和向下造型等
- HttpClient Received an unexpected EOF or 0 bytes from the transport stream
- 吴恩达机器学习笔记59-向量化:低秩矩阵分解与均值归一化(Vectorization: Low Rank Matrix Factorization &; Mean Normalization)
- SSM整合(四)-整合后配置文件汇总
- asp.net core 系列之用户认证(1)-给项目添加 Identity
- mybatis关联查询数据模型分析——(七)
- Redis缓冲区设置
- 423. Valid Parentheses【LintCode java】
- 接口测试工具postman(二)创建新项目