本文以将C语言函数接口封装为Python下的接口为例进行介绍。系统环境winXP 32。

一、软件安装

(1)安装Python

下载地址:https://www.python.org/getit/,版本2.7.9;点击python-2.7.9.msi进行安装,安装在C:\Python27目录下;设置环境变量:我的电脑--控制面板--系统--高级--环境变量--在用户变量下找到PATH--编辑--在变量值中填入C:\Python27。

(2)安装swigwin

下载地址:http://www.swig.org/download.html,版本3.0.12;解压在C:\swigwin-3.0.12目录下,并设置环境变量:……在用户变量下找到PATH--编辑--在变量值中填入C:\swigwin-3.0.12。

二、简单举例

让我们以一个简单举例入手,在Windows下将C函数制作成DLL库,并将其封装成Python的一个Module,然后再Python中import这个Module,然后再Python中调用这个Module中的函数。

(1)新建VS2010工程

打开VS2010,新建Win32 Console Application,在Application Settings中选择DLL以及空项目。完成后将工程配置改为Release,如若不改后面编译会出错(因为我下载的Python是Release版的,而非Debug版)。

(2)在工程中新建example.c(内容为swigwin-3.0.12\Examples\python\simple\example.c)

(3)在工程中新建 example.i(内容为swigwin-3.0.12\Examples\python\simple\example.i)

(4)修改example.i的属性

选中example.i--右键--属性--常规--选择自定义生成工具;

选中example.i--右键--属性--自定义生成工具--常规:

命令行:

echo In order to function correctly, please ensure the following environment variables are correctly set:

echo PYTHON_INCLUDE: %PYTHON_INCLUDE%

echo PYTHON_LIB: %PYTHON_LIB%

echo on

C:\swigwin-3.0.12\swig.exe  -python“%(FullPath)”

输出:

$(InputName)_wrap.c

(5)编译example.i

选中example.i--右键--编译,将产生example.py和example_wrap.c,将example_wrap.c加入工程。

在Python中使用import example就会去加载example.py文件。而example.py文件的第一句就是import _example,_example是什么呢,就是我们要制作的一个动态库,即我们要把Swig生成的example_wrap.c和自己编写的example.c放在一起制作一个名为_example.pyd的动态库来。

注意:步骤(4)(5)也可以不在VS2010下进行,改为在DOS命令行进行,即步骤(4)(5)可以被如下操作代替:

在开始--运行--输入cmd进入DOS命令行,

切换到example.c所在的目录命令cd C:\ swigwin-3.0.12\Examples\python\simple\example.c,

然后编译example.i,命令swig -python example.i。

(6)设置Python库的环境变量

我的电脑--控制面板--系统--高级--环境变量--新建,变量名和值分别为如下两组:

PYTHON_INCLUDE: C:\python27\include
       PYTHON_LIB: C:\python27\libs\python27.lib

因为example_wrap.c文件中会用到python.h (包含)和python21.lib(链接)。

(7)修改VS2010工程的配置属性

选择项目--属性即可打开属性页。

C/C++--常规--附加包含目录:$( PYTHON_INCLUDE)

链接器--常规--输出文件:_example.pyd

连接器--输入--附加依赖项:$( PYTHON_LIB)

(8)编译整个工程。

将生成的example.py和_example.pyd拷贝出来即可在Python中使用。

(9)动态库在Python中的使用

将生成的example.py和_example.pyd拷贝到D:\test目录下。

打开DOS命令行,执行如下操作:

切换到D盘

>D:

>cd D:\test

进入python交互命令行

>python

>>>import example

>>>x = 42
>>>y = 105
>>>g = example.gcd(x, y)
>>>print "The gcd of %d and %d is %d" % (x, y, g)
The gcd of 42 and 105 is 21
>>>print "Foo = ", example.cvar.Foo
Foo = 3.0
>>>example.cvar.Foo = 3.1415926
>>>print "Foo = ", example.cvar.Foo
Foo = 3.1415926

参考:

(1)SWIG的使用教程

https://wenku.baidu.com/view/8f4bab73001ca300a6c30c22590102020740f2c4.html

(2)用C编写Python扩展找不到Python27_d.lib

http://blog.sina.com.cn/s/blog_75e9551f0101aajd.html

https://blog.csdn.net/junparadox/article/details/52704287

(3)windows下使用swig

https://blog.csdn.net/A8572785/article/details/10427521

(4)如何实现 C/C++ 与 Python 的通信?

https://www.zhihu.com/question/23003213

(5)在Win7环境下,利用SWIG实现Python调用C的方法

https://blog.csdn.net/cuiqiang1990csdn/article/details/45310821

(6)利用 SWIG 对 C++ 库进行 Python 包装

https://segmentfault.com/a/1190000013219667?utm_source=tag-newest

(7)swig入门

https://blog.csdn.net/zhangzq86/article/details/78836309

(8)PYTHON调用C语言函数

https://coolshell.cn/articles/671.html

https://www.cnblogs.com/zhsuiy/p/4798642.html

(9)c#利用SWIG调用c++dll学习总结

https://blog.csdn.net/liu14lang/article/details/78882539

Swig在windows下的使用流程相关推荐

  1. Windows下vulkan开发流程分析

    Windows下vulkan开发流程 blog.csdn.net/a2831942318 1.枚举实例扩展属性: vkEnumerateInstanceExtensionProperties [0/1 ...

  2. windows下oracle启动流程,windows下oracle的启动

    windows下Oracle的启动一般是伴随windows自动启动,自动关闭的.但是如果使用任务管理器杀掉了Oracle进程,可以通过命令行方式启动和关闭oracle. 启动oracle服务:C:Do ...

  3. windows下oracle启动流程,笔者设置win7系统手动启动Oracle服务的还原步骤

    相信大部分在使用电脑工作的时候,有时候会遇到win7系统手动启动Oracle服务的问题,最近有很多朋友来向我咨询win7系统手动启动Oracle服务的问题如何解决,针对这一问题,我给大家整理总结出了w ...

  4. oracle 备份批处理,windows下oracle自动备份批处理

    上一篇日志中,我将windows下的备份流程分成了五步走.本日志就结合上篇的理论来个实例.该实例是来自于我现网的中的一个备份示例(不要想着弄我密码啊,内容改过的,呵呵).费话少说,直接上脚本: @ec ...

  5. Windows平台下程序打包流程

    Windows平台下程序打包流程 1.所有测试完成之后.程序release编译完成 2.依赖库打包 执行deploy.bat 脚本打包最新的程序以及依赖库 3.可执行程序打包 打开打包工程文件.evb ...

  6. Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27)

    Windows下显卡支持的cuda及配套GPU版本pytorch下载全流程(2022.03.27) 一.更新电脑显卡驱动(以mx150为例) 1.打开英伟达驱动下载官网:https://www.nvi ...

  7. windows下ios证书申请流程(在线傻瓜式)

    苹果官方提供的方法,申请证书是需要mac电脑的,这里我不介绍使用mac电脑的方法,因为大部分的人都是没有mac电脑的,假如为了生成一个证书而花7000元买个mac电脑,很不划算. 所以,我们需要一个能 ...

  8. Windows下的工作组与域环境以及域的搭建管理流程

    Windows下工作组与域的概念 企业生产中工作组与域之间的优劣 域实现的核心思想:域控制器(DC)和活动目录(AD) 搭建活动目录并将计算机加入域中 通过域控实现用户的统一身份验证 通过组策略实现域 ...

  9. windows下编写C++与C# 无崩溃程序

    C++性能好,但因为很多时候直接操作内存,稳定性一直都不太好.在程序上线之前肯定希望缺陷都能够解决,但是谁都不能保证上线之后是零缺陷,如何保证上线之后的程序零崩溃是一直都是一个比较麻烦的问题.为此,花 ...

最新文章

  1. RHEL7.0 DNS服务配置
  2. 让你觉得破坏了封装性的扩展方法
  3. 大厂中秋礼盒大PK!祝大家中秋快乐,送大家鹅厂月饼礼盒!
  4. activiti自定义流程之Spring整合activiti-modeler5.16实例(四):部署流程定义
  5. linux 硬盘转换gpt分区格式化吗,Linux下使用gpt给磁盘分区、格式化、挂载
  6. 前端学习(239):渐进增强和优雅降级
  7. Mac idea中git igenore设置
  8. 5G精华问答 | 5G的关键无线技术是啥?
  9. QSS(Qt样式表)概念
  10. 云栖·武汉峰会 | 现场:阿里云为何频打“自研”牌?
  11. N,N-二甲基十二烷基胺(CAS 112-18-5)的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  12. 黑魔法-伪类匹配列表数目实现微信群头像CSS布局的技巧
  13. C++ 线性表的结构体定义(顺序表和链式表)
  14. BUUCTF [GXYCTF2019] 禁止套娃
  15. 强制删除五笔字型输入法
  16. 国内DRGs发展之路
  17. 商旅问题TSP——动态规划(c++ 动态规划)
  18. java多线程并发卖票问题
  19. 你可能不知道的手机必备神仙APP
  20. echarts柱状图,不同颜色,立体,lable不同颜色,lable有背景图。

热门文章

  1. linux 查看网络流量来源_linux中查看网卡流量六种方法
  2. 如何将网站发布上线,并配置自定义域名
  3. vue中如何使用富文本编辑器(TinyMce)
  4. 【转载】采样频率、采样点数、频率分辨率
  5. Word或者Excel中怎么把 空格 替换成 换行
  6. 网站分享:7个非常好用的电子书网站
  7. 什么是HashTable?HashMap和HashTable的区别
  8. 业内人员告诉你银行测试到底做什么,怎么进银行测试.....
  9. Power BI业绩杜邦分析
  10. 实验四 串行通信实验