# 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() # 释放内存

最新文章

  1. osgi学习
  2. hdu 1398 Square Coins(简单dp)
  3. resharper安装后,一不小心点错了(选择了object browser)
  4. 《Head First设计模式(中文版)》
  5. java中String类、StringBuilder类和StringBuffer类详解
  6. ztree使用系列四(ztree实现同级拖拽排序并将排序结果保存数据库)
  7. VIM小技巧之文件名补全
  8. Java二维码登录流程实现(包含短地址生成,含部分代码)
  9. solr group分组查询
  10. PCB板上镀镍厚度
  11. 算法笔记_014:合并排序(Java)
  12. Java中的向上造型和向下造型等
  13. HttpClient Received an unexpected EOF or 0 bytes from the transport stream
  14. 吴恩达机器学习笔记59-向量化:低秩矩阵分解与均值归一化(Vectorization: Low Rank Matrix Factorization & Mean Normalization)
  15. SSM整合(四)-整合后配置文件汇总
  16. asp.net core 系列之用户认证(1)-给项目添加 Identity
  17. mybatis关联查询数据模型分析——(七)
  18. Redis缓冲区设置
  19. 423. Valid Parentheses【LintCode java】
  20. 接口测试工具postman(二)创建新项目

热门文章

  1. 图文并茂使用VUE+Quasar CLI开发和构建PWA,registerServiceWorker介绍
  2. Flutter入门资料推荐
  3. Nacos注册中心 (介绍与配置)
  4. C#网络爬虫开发
  5. WSL 2 内配置Fcitx自启动
  6. echarts入门到应用学习笔记
  7. 基于ROS的串口底层写法
  8. kali挂代理之——proxychains4
  9. JZOJ 7339.改试卷
  10. 【NOIP2012提高组】开车旅行