python使用ctypes调用c/c++函数
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++函数相关推荐
- Linux下 Python通过ctypes调用cAPI (一)
c_long和c_int是一种类型. cdll加载使用标准cdecl调用约定导出函数的库 windll使用stdcall调用约定调用函数 oledll也使用stdcall调用约定 在linux下通过两 ...
- python通过ctypes调用海康网络sdk取流
项目中经常需要使用海康的网络摄像头,做视频图像算法经常会用到rtsp流,但是rtsp一般很难保证实时性且解码效率不能保证.通过海康给的python的demo,对模块进行封装以方便python像调用op ...
- Python 通过ctypes调用 ICTCLAS3.0.DLL
调用,封装 ICTCLAS的部分尽量是写成模块的形式,不要封装成函数,否则容易出 access volation 0xx000,或者是 bSuccess = dll.ICTCLAS_Paragraph ...
- PythonC++相互混合调用编程全面实战-02使用Python的ctypes调用的windows的dll动态链接库
作者:虚坏叔叔 博客:https://xuhss.com 早餐店不会开到晚上,想吃的人早就来了!
- 10.4.4 使用ctypes调用kernel32.dll中的函数
10.4.4 使用ctypes调用kernel32.dll中的函数 2007-10-17 14:41 孙广磊 人民邮电出版社 字号:T | T 综合评级: 想读(5) 在读(0) 已读(6) ...
- python c 语言接口,## 人生苦短我用python[0x08] 使用ctypes调用c语言接口 ##
文章内容为原创,欢迎转载请注明出处 作者: EflyPro->晦明禅师 1.背景 python作为解析语言大规模应用在各个领域,c语言作为系统级别的语言广泛应用在基础,系统,网络等底层服务当中, ...
- Python调用C语言函数
Python调用C,主要是依靠Python的ctypes调用动态链接库 返回"简单类型" C代码: int multiply(int num1, int num2) {return ...
- python中ctypes的使用
Python 和 C 的混合编程工具有很多,这里介绍 Python 标准库自带的 ctypes 模块的使用方法. 初识 Python 的 ctypes 要使用 C 函数,需要先将 C 编译成动态链接库 ...
- python调用动态链接库windows_用win从python ctypes调用标准windows.dll的Segfault
我试图在Linux上运行的Python脚本中从Kernel32.dll调用一些函数.正如Johannes Weiß指出的How to call Wine dll from python on Linu ...
最新文章
- 阿里云ONS而微软Azure Service Bus体系结构和功能比较
- 【安全漏洞】ThinkPHP 3.2.3 漏洞复现
- 【MVC】ASP.NET MVC5 使用MiniProfiler 监控MVC性能
- Windows下memcached.exe的安装与配置
- matlab如何判断矩阵中元素都大于0_在MATLAB中找到矩阵中零元素的数量
- z-index无效解决
- DB9封装、TTL/CMOS/RS232电平基础
- 十进制小数转二进制用计算机操作,十进制转二进制
- Endnotex8 运行时出现错误 unknown error -0xA84c的解决办法
- Beijing54坐标系——Y坐标(6位数和8位数)区别
- Java poi 生成PPT并插入Excel附件并以图片形式显示代-代码例子
- burpsuite之CSRF测试
- 使用vue-print-nb打印element table时表格打印不全的问题
- 2021最新 北京互联网公司排名
- 调用tel://打电话
- R8-1 中序和后序创建二叉树
- Mac 更新系统后无法使用git
- cxxxxx和xxxxx.h的区别
- P4 晶体管四种工作状态+静态分析【更新】
- 敏涵·精致遮暇乳打造“新国妆”专场 致力新锐品牌强势“出圈”
热门文章
- 资源名称中英文特殊字符乱码处理
- 【论文阅读】让数据库听懂人话(Text-to-SQL)
- 数值方法2:龙格库塔法在解微分方程中的应用
- 如何准确查询网易邮箱和微软邮箱的注册时间
- 怎样恢复安装计算机,计算机安装双系统后如何修复系统引导 修复系统引导的方法...
- c 语言程序流程控制应用实验报告,程序流程控制实验报告.doc
- 成员信息管理系统c语言,《C语言工会成员信息管理系统》.doc
- lisp调用布置天正的图块_操作太慢?那是你没有正确使用AutoCAD图块!
- 华为云计算入门-计算虚拟化
- sklearn 笔记:高斯过程