python调用c/c++函数

  • 工具
  • 一 生成动态链接库文件
    • 1. 创建头文件
    • 2. 项目属性选择配置类型为动态库
    • 3. 选择Debug x86,启动调试
    • 4. 无视以下报错信息
    • 5. 找到生成的dll文件
  • 二 python使用ctypes库调用cpp函数
    • Anaconda安装32位python
    • pycharm项目配置解释器
    • ctypes调用c函数包括以下过程

工具

c/c++ IDE: Visual Studio 2019
python IDE: pycharm
Anaconda

一 生成动态链接库文件

1. 创建头文件

包含函数的.cpp文件(.c改为.cpp)创建同名.h头文件,添加以下代码

#pragma once
#ifdef MATHLIBRARY_EXPORTS
#define MATHLIBRARY_API __declspec(dllexport)
#else
#define MATHLIBRARY_API __declspec(dllimport)
#endif// 函数声明写在该头文件中
extern "C" MATHLIBRARY_API [函数声明] // .cpp后缀不报错

2. 项目属性选择配置类型为动态库

3. 选择Debug x86,启动调试

注:1)可能出现x86调试正确,x64调试报以下错误,为避免麻烦选择x86;

2)选择x86会导致dll(32bit)和python(64bit)位数不同,后面用虚拟环境安装32位python解决。

4. 无视以下报错信息

5. 找到生成的dll文件

右击项目——在文件资源管理器中打开文件夹./ debug / [源文件名].dll

二 python使用ctypes库调用cpp函数

Anaconda安装32位python

Anaconda Powershell Prompt:
conda create -n [环境名] # 新建虚拟环境
conda activate [环境名] # 进入虚拟环境
conda config --env --set subdir win-32 # 设置环境位数32位
conda install python=3.8 # 安装32位python

pycharm项目配置解释器

pycharm——File——setting——project——python interpreter 添加虚拟环境下的32位解释器

ctypes调用c函数包括以下过程

# 1 导入ctypes
from ctypes import *# 2 加载动态链接库
libc = cdll.LoadLibrary("x.dll") # 第一部分创建的.dll文件路径# 3 找到函数
func = libc.functionName  # 用自己的函数名替换# 4 设置函数参数和返回值类型
func.argtypes = (c_int, c_int)     # 本示例有两个int型参数
func.restype = type_p_int      # 本示例返回值类型为int*# 5 python参数转为c参数,参数个数,类型要与上面设置的个数匹配
# 参考下面链接的文章
# 提示:尽量使用C/C++常用数据类型# 6 调用函数,返回结果
result = func(param1, param2)

最全ctypes用法总结

python使用ctypes调用c/c++函数相关推荐

  1. Linux下 Python通过ctypes调用cAPI (一)

    c_long和c_int是一种类型. cdll加载使用标准cdecl调用约定导出函数的库 windll使用stdcall调用约定调用函数 oledll也使用stdcall调用约定 在linux下通过两 ...

  2. python通过ctypes调用海康网络sdk取流

    项目中经常需要使用海康的网络摄像头,做视频图像算法经常会用到rtsp流,但是rtsp一般很难保证实时性且解码效率不能保证.通过海康给的python的demo,对模块进行封装以方便python像调用op ...

  3. Python 通过ctypes调用 ICTCLAS3.0.DLL

    调用,封装 ICTCLAS的部分尽量是写成模块的形式,不要封装成函数,否则容易出 access volation 0xx000,或者是 bSuccess = dll.ICTCLAS_Paragraph ...

  4. PythonC++相互混合调用编程全面实战-02使用Python的ctypes调用的windows的dll动态链接库

    作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!

  5. 10.4.4 使用ctypes调用kernel32.dll中的函数

    10.4.4 使用ctypes调用kernel32.dll中的函数 2007-10-17 14:41 孙广磊 人民邮电出版社 字号:T | T 综合评级: 想读(5)  在读(0)  已读(6)   ...

  6. python c 语言接口,## 人生苦短我用python[0x08] 使用ctypes调用c语言接口 ##

    文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 1.背景 python作为解析语言大规模应用在各个领域,c语言作为系统级别的语言广泛应用在基础,系统,网络等底层服务当中, ...

  7. Python调用C语言函数

    Python调用C,主要是依靠Python的ctypes调用动态链接库 返回"简单类型" C代码: int multiply(int num1, int num2) {return ...

  8. python中ctypes的使用

    Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法. 初识 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库 ...

  9. python调用动态链接库windows_用win从python ctypes调用标准windows.dll的Segfault

    我试图在Linux上运行的Python脚本中从Kernel32.dll调用一些函数.正如Johannes Weiß指出的How to call Wine dll from python on Linu ...

最新文章

  1. 阿里云ONS而微软Azure Service Bus体系结构和功能比较
  2. 【安全漏洞】ThinkPHP 3.2.3 漏洞复现
  3. 【MVC】ASP.NET MVC5 使用MiniProfiler 监控MVC性能
  4. Windows下memcached.exe的安装与配置
  5. matlab如何判断矩阵中元素都大于0_在MATLAB中找到矩阵中零元素的数量
  6. z-index无效解决
  7. DB9封装、TTL/CMOS/RS232电平基础
  8. 十进制小数转二进制用计算机操作,十进制转二进制
  9. Endnotex8 运行时出现错误 unknown error -0xA84c的解决办法
  10. Beijing54坐标系——Y坐标(6位数和8位数)区别
  11. Java poi 生成PPT并插入Excel附件并以图片形式显示代-代码例子
  12. burpsuite之CSRF测试
  13. 使用vue-print-nb打印element table时表格打印不全的问题
  14. 2021最新 北京互联网公司排名
  15. 调用tel://打电话
  16. R8-1 中序和后序创建二叉树
  17. Mac 更新系统后无法使用git
  18. cxxxxx和xxxxx.h的区别
  19. P4 晶体管四种工作状态+静态分析【更新】
  20. 敏涵·精致遮暇乳打造“新国妆”专场 致力新锐品牌强势“出圈”

热门文章

  1. 资源名称中英文特殊字符乱码处理
  2. 【论文阅读】让数据库听懂人话(Text-to-SQL)
  3. 数值方法2:龙格库塔法在解微分方程中的应用
  4. 如何准确查询网易邮箱和微软邮箱的注册时间
  5. 怎样恢复安装计算机,计算机安装双系统后如何修复系统引导 修复系统引导的方法...
  6. c 语言程序流程控制应用实验报告,程序流程控制实验报告.doc
  7. 成员信息管理系统c语言,《C语言工会成员信息管理系统》.doc
  8. lisp调用布置天正的图块_操作太慢?那是你没有正确使用AutoCAD图块!
  9. 华为云计算入门-计算虚拟化
  10. sklearn 笔记:高斯过程