python3使用ctypes在windows中访问C和C++动态链接库函数示例

这是我们的第一个示例,我们尽量简单,不传参,不返回,不访问其他的动态链接库

一 测试环境介绍和准备

测试环境:

操作系统:windows10

Python版本:3.7.0

VS版本:vs2015社区版(免费)

相关工具下载:

VS版本vs2015社区版(免费)

Python3.7.0 (源码和安装文件)

http://ffmpeg.club/python

二 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++动态链接库函数示例的更多相关文章

  1. windows+ubuntu双系统,在windows中访问ubuntu文件

    今天被告知ubuntu磁盘空间不足,百度得知可以通过autoremove命令清理,然而,,再也进不去ubuntu系统了,具体表现为第一次选择ubuntu之后一直是空白紫屏,如果强制关机再开机后选择ub ...

  2. windows中操作文件和目录的函数

    1.文件操作函数       CreateFile();//创建或打开文件      ReadFile();//从文件读      WriteFile();//向文件写      SetFilePoi ...

  3. 碰到在Windows中访问局域网文件夹, 提示无法访问时的解决办法

    运行:gpedit.msc 找到下图的位置, 启用即可

  4. 使用PuTTY在Windows中向Linux上传文件

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3843207.html ...

  5. Vmware /CentOS访问Windows中的文件

    1.将该文件设为共享文件夹 2.确定你的windows IP地址,用户名及密码 3.CentOS终端输入以下内容:   [root@*** mnt]# mkdir winD   [root@*** m ...

  6. Windows下访问VMware中tomcat

    很多人都可能和我一样,运行在虚拟机上,开发时在windows上进行. 在linux上运行tomcat,并且windows中能ping通虚拟机,但就不能通过虚拟机ip访问到8080端口上的tomcat, ...

  7. 在java程序中访问windows有用户名和密码保护的共享目录

    在java程序中访问windows有用户名和密码保护的共享目录 Posted on 2015-11-20 14:03 云自无心水自闲 阅读(3744) 评论(0)  编辑  收藏 --> Jav ...

  8. Ubuntu下访问Windows中Postgresql

    因为项目的原因,需要将Ubuntu中的一些信息记录到Windows中的Postgresql数据库中,查看网上信息,最后成功了,特地记录以下,需要以下步骤: (1)在Windows中Postgresql ...

  9. Windows中使用TortoiseGit提交项目到GitLab配置

    下文来给各位介绍Windows中使用TortoiseGit提交项目到GitLab配置过程,下在全部图片希望对各位带来方便面. Gitlab默认的配置推荐使用shell命令行与server端进行交互,作 ...

随机推荐

  1. ASP.NET Core - 从Program和Startup开始

    Program 我们先看一下1.x和2.x的程序入口项的一个差异 1.x public class Program { public static void Main(string[] args) { ...

  2. java面试记录

    怎么确保一个集合不能被修改   ArrayList<String> list = new ArrayList<>();list.add("x");Colle ...

  3. JavaSE面试题收集【仅有题目,答案自备】

    一共有140个题目,可以参考下.一个“.java”源文件中是否可以包含多个类(不是内部类)?有什么限制?说说&和&&的区别在Java中如何跳出当前的多重嵌套循环?IO流的分类S ...

  4. c#解决TCP“粘包”问题

    一:TCP粘包产生的原理 1,TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾.出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能 ...

  5. nginx系列13:最少连接算法以及如何跨worker进程生效

    最少连接算法 使用最少连接算法可以使得nginx优先选择连接最少的上游服务器,需要用到upstream_least_conn模块. 如何跨worker进程生效 因为nginx是多进程结构的,默认多个w ...

  6. Web前端 web的学习之路

    零基础学习web前端的顺序 ( 转载自:https://blog.csdn.net/weixin_41780944/article/details/83751632) 怎么开始学习两条路:自学或者找培 ...

  7. 在Docker中体验数据库之MySql

    在上一篇在Docker中体验数据库之Mongodb之后,这次记录一下在docker中安装mysql.过程要比Mongodb麻烦一点…… 参考网址: https://dev.mysql.com/doc/ ...

  8. hadoop集群的搭建

    hadoop集群的搭建 1.ubuntu 14.04更换成阿里云源 刚刚开始我选择了nat模式,所有可以连通网络,但是不能ping通,我就是想安装一下mysql,因为安装手动安装mysql太麻烦了,然 ...

  9. Java初学习-常见单词

    implements    实行/实现      用于实现接口(interface) extends           延伸/扩展         用于类的继承 container        容 ...

  10. poi控制简单的word

    官方model网址:http://svn.apache.org/repos/asf/poi/trunk/src/examples/src/org/apache/poi/xwpf/usermodel/e ...