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. Scrum Mastery:产品开发中如何优化产品价值?

    您是否在开发对组织来说有价值的产品?如何判断产品是否有价值? 如果没有经常提出这两个问题,那么您可能忽略了产品价值方面的问题. 产品是目前工作所要达成的目的,是组建团队的原因.产品也是你选择Scrum ...

  2. Python input保证输入为int类型

    t = float(input("t(℃)="))

  3. Golang 语言的单元测试和性能测试(也叫 压力测试)

    Golang单元测试对文件名和方法名,参数都有很严格的要求. 例如: 1.文件名必须以xx_test.go命名 2.方法必须是Test[^a-z]开头(T必须大写),func TestXxx (t * ...

  4. Java基础系列-Comparable和Comparator

    原创文章,转载请标注出处:<Java基础系列-Comparable和Comparator> 一.概述         Java中的排序是由Comparable和Comparator这两个接 ...

  5. Django-restframework之路由控制、解析器及响应器

    django-restframework之路由控制.解析器及响应器 一 前言 本篇博客介绍 restframework 框架的剩下几个组件,路由控制有三种:传统路由.半自动路由及全自动路由:解析器是用 ...

  6. 菜鸟入门【ASP.NET Core】1:环境安装

    下载.NET Core SDK 下载地址:https://www.microsoft.com/net/download/windows https://www.microsoft.com/net/le ...

  7. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

  8. arcgis api 3.x for js 实现克里金插值渲染图不依赖 GP 服务(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 3.x for js:esri 官网 api,里面详细的介绍 arcgis api 3.x 各个类 ...

  9. kotlin 第一个Android项目

    一.创建过程 二.TextView点击事件 class MainActivity : AppCompatActivity() { lateinit var tv:TextView; //初始化Text ...

  10. 【English】十、"谓语的地方"看到有两个动词:I go say hello.、非谓语形式

    一.I go say hello. 这是一种偏口语的说法.一个句子中不能同时有两个谓语. 标准的用法有: I go and say hello. and 连接这两个动词,表示并列等关系.go and ...