python3使用ctypes在windows中访问C和C++动态链接库函数示例
python3使用ctypes在windows中访问C和C++动态链接库函数示例
这是我们的第一个示例,我们尽量简单,不传参,不返回,不访问其他的动态链接库
一 测试环境介绍和准备
测试环境:
操作系统:windows10
Python版本:3.7.0
VS版本:vs2015社区版(免费)
相关工具下载:
VS版本vs2015社区版(免费)
Python3.7.0 (源码和安装文件)
二 C/C++部分代码
1 首先完成C/C++的动态链接库,与做python扩展库不同,ctypes调用的c++库其实与python没有代码关联,只是提供了开放公共标准。
2 创建VS的win32项目,选择DLL库的空项目,也可以选择导出符号,他会帮你把动态库的一些宏做好。

3 创建testctypes.cpp代码

其中extern "C"表示将此函数编译为c语言函数,如果你源码是.c也就是用c语言编译则不需要加extern "C"。
__declspec(dllexport) 是windows中特有的导出库函数,如果没有这个库函数是访问不到的,如果做跨平台到linux中可以通过宏语法把它去掉。
4 将dll文件导出设置到当前项目路径,并完成编译

我们编译出win32的debug库,注意位数不能错,如果是python是64位的也编译64位的库

三 Python部分的代码
from ctypes import *
lib = CDLL("testctypes") #可以加路径
lib.CFunction()

from ctypes import * 导入ctypes库所有类和函数
CDLL("testctype")加载具体的动态链接库文件,可以加入路径比如 dll/testctype ,在windows中省略动态库的后缀名dll,python会找testctype.dll的文件。注意dll文件可以放在python执行的路径下,也可以放到系统路径或者path环境变量所设置的路径。
lib.CFunction() 加载动态链接库中的CFunction函数,注意虽然我们用c++来做扩展库,python本身也做了很多支持c++的代码,但ctypes访问函数只支持C语言函数,C++函数因为有重载函数名不确定,所以无法访问。
运行测试结果

测试成功,第一步我们完成,下一篇文章再开始来添加参数和返回值
相关课程视频可以观看

http://laoxiaketang.com/python.html
python3使用ctypes在windows中访问C和C++动态链接库函数示例的更多相关文章
- windows+ubuntu双系统,在windows中访问ubuntu文件
今天被告知ubuntu磁盘空间不足,百度得知可以通过autoremove命令清理,然而,,再也进不去ubuntu系统了,具体表现为第一次选择ubuntu之后一直是空白紫屏,如果强制关机再开机后选择ub ...
- windows中操作文件和目录的函数
1.文件操作函数 CreateFile();//创建或打开文件 ReadFile();//从文件读 WriteFile();//向文件写 SetFilePoi ...
- 碰到在Windows中访问局域网文件夹, 提示无法访问时的解决办法
运行:gpedit.msc 找到下图的位置, 启用即可
- 使用PuTTY在Windows中向Linux上传文件
为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3843207.html ...
- Vmware /CentOS访问Windows中的文件
1.将该文件设为共享文件夹 2.确定你的windows IP地址,用户名及密码 3.CentOS终端输入以下内容: [root@*** mnt]# mkdir winD [root@*** m ...
- Windows下访问VMware中tomcat
很多人都可能和我一样,运行在虚拟机上,开发时在windows上进行. 在linux上运行tomcat,并且windows中能ping通虚拟机,但就不能通过虚拟机ip访问到8080端口上的tomcat, ...
- 在java程序中访问windows有用户名和密码保护的共享目录
在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0) 编辑 收藏 --> Jav ...
- Ubuntu下访问Windows中Postgresql
因为项目的原因,需要将Ubuntu中的一些信息记录到Windows中的Postgresql数据库中,查看网上信息,最后成功了,特地记录以下,需要以下步骤: (1)在Windows中Postgresql ...
- Windows中使用TortoiseGit提交项目到GitLab配置
下文来给各位介绍Windows中使用TortoiseGit提交项目到GitLab配置过程,下在全部图片希望对各位带来方便面. Gitlab默认的配置推荐使用shell命令行与server端进行交互,作 ...
随机推荐
- 解读经典《C#高级编程》继承 页107-113.章4
前言 本章节开始讲接口. 接口 接口的声明很像抽象类,有方法的声明但无方法体.但它比抽象类限制更多.和类比起来,接口的定义有众多限制. 接口只能包含声明,而无方法体 接口只能包含方法.属性.索引器.事 ...
- python的小技巧 让你的代码更美观
持续更新.. 1,活用lambda表达式 匿名函数 lambda 可以提供很多便利.下面是举例. dic = {1:lambda a,b : a+b} 2,代码一行化. 当逻辑语句后只有一行代码的时候 ...
- Spring Boot 和 Docker 实现微服务部署
Spring boot 开发轻巧的微服务提供了便利,Docker 的发展又极大的方便了微服务的部署.这篇文章介绍一下如果借助 maven 来快速的生成微服务的镜像以及快速启动服务. 其实将 Sprin ...
- C# 实体类转json数据过滤掉字段为null的字段
C# 实体类转json数据过滤掉字段为null的字段 语法如下: var jsonSetting = new JsonSerializerSettings {NullValueHandling = N ...
- OGNL详解
A.什么是OGNL? 全称叫ObjectGraphic Navigation Language(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了 ...
- .net core identity集成微信授权登录
最快的方式是直接nuget安装AspNetCore.Authentication.WeChat包. 想要知道是如何实现的,可以看下面github上面的源码. 源码在这里:https://github. ...
- off-canvas:抽屉式页面布局的纯css实现
Off-canvas即抽屉式的侧边导航栏布局,导航栏在大尺寸屏幕的时候可以设置无需隐藏,小尺寸屏幕的时候自动隐藏,并出现.off-canvas-toggle用以打开导航栏,打开导航栏的状态下可以点击非 ...
- 小米平板8.0以上系统如何不用root激活xposed框架的流程
在大多使用室的引流,或业务操作中,基本上都需要使用安卓的强大XPOSED框架,近来我们使用室购来了一批新的小米平板8.0以上系统,基本上都都是基于7.0以上系统版本,基本上都不能够刷入ROOT的su权 ...
- SQLServer之ISO游标使用
什么是游标 结果集,结果集就是select查询之后返回的所有行数据的集合. 游标则是处理结果集的一种机制吧,它可以定位到结果集中的某一行,多数据进行读写,也可以移动游标定位到你所需要的行中进行操作数据 ...
- Python 进程(一)理论部分
进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行,即正在运行的程序,是系统进行资源分配和调度的基本单位,进程是对正在运行程序的一个抽象,在早期面向进程设计的计算机结构中,进程是程 ...