Windows10系统Python2.7通过Swig调用C++过程

我用的 python版本是2.7.12:

Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32

 

1, 下载Swig

  下载地址:http://www.swig.org/download.html,我下载了最新版本swigwin-4.0.0. 下载后直接解压,把 swig.exe 所在目录添加到系统环境变量 Path中。在 Command中输入 swig -version,如果出现版本号说明添加成功。

 

2,编写 c++代码

  头文件 example.h

 1 #pragma once
 2 
 3 #include <iostream>
 4 using namespace std;
 5 
 6 class Example {
 7 public:
 8 
 9     const char* getString();
10     void setString(const char* str);
11 };

  example.cpp

 1 #include "example.h"
 2 
 3 void Example::setString(const char* str)
 4 {
 5     cout<<str<<endl;
 6 }
 7 
 8 const char* Example::getString()
 9 {
10     return "hello";
11 }

 

3,编写 example.i 文件

1 %module Example
2 
3 %{
4 #include "example.h"
5 %}
6 
7 %include "example.h"

 

4,编写 setup.py 文件

1 from distutils.core import setup,Extension
2 test_module = Extension('_Example',sources = ['example_wrap.cxx','example.cpp'],)
3 setup(name = 'example',
4       version = '0.1',
5       author = '',
6       description = 'Simple swig example',
7       ext_modules = [test_module],
8       py_modules = ['example'],
9       )

 

5,运行命令 regedit 打开注册表,查看下列路径是否有该键值  productdir:VS安装目录\VC\Auxiliary\Build,如果没有则新建目录并添加键值。这个目录"VS安装目录\VC\Auxiliary\Build"其实是 vcvarsall.bat 文件所在目录,python要用到vcvarsall.bat。

\HKEY_CURRENT_USER\Software\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC

因为我的VS安装在c:\vs2019,所以我设置 productdir:c:\vs2019\VC\Auxiliary\Build

 

6, 打开 Command,cd 到 example.i  文件所在目录,确保 c++文件和 example.i  文件在同一个目录下;输入下列命令:

  swig -python -c++ example.i

  产生文件 Example.py 和 example_wrap.cxx。

 

7,Command继续输入命令:

  python2 setup.py build_ext --inplace

 产生 _Example.pyd 文件。如果没有产生这个文件,查看错误原因,如果第 5 步没成功提示 cannot find vcvarsall.bat

 

8,Command 输入 Python2 进入 python环境:

>>> from Example import *
>>> ex = Example()
>>> ex.getString()
'hello'
>>> ex.setString("hello")
hello

说明:最好不要通过 Visual studio 来产生 pyd 文件,因为 python与 VC版本不匹配会出现各种错误提示。比如2.7.12需要MSC v.1500即VS2008版本。

MS VC++ 14.0 _MSC_VER = 1900 vs2015
MS VC++ 12.0 _MSC_VER = 1800 vs2013的编译器他的平台是v120
MS VC++ 11.0 _MSC_VER = 1700 vs2012的编译器他的平台是v110
MS VC++ 10.0 _MSC_VER = 1600 Visual C++ 2010
MS VC++ 9.0 _MSC_VER = 1500 Visual C++ 2008
MS VC++ 8.0 _MSC_VER = 1400 Visual C++ 2005
MS VC++ 7.1 _MSC_VER = 1310
MS VC++ 7.0 _MSC_VER = 1300
MS VC++ 6.0 _MSC_VER = 1200
MS VC++ 5.0 _MSC_VER = 1100

转载于:https://www.cnblogs.com/gujf2016/p/11282202.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/263003.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《当程序员的那些狗日日子》(六十一)美丽的天际

《当程序员的那些狗日日子》&#xff08;六十一&#xff09;美丽的天际 注&#xff1a;这一篇之后&#xff0c;全文完结&#xff0c;后面还会再写一篇《后记》&#xff0c;以记录我在写作中的一些心情和感受&#xff0c;以及我想对各位支持和关注的朋友说的话。 我交了订金订购…

ewebeditor遍历路径漏洞

ewebeditor/admin_uploadfile.asp?id14在id14后面添加&dir..再加 &dir../..&dirhttp://www.cnblogs.com/../.. 看到整个网站文件了 转载于:https://www.cnblogs.com/allyesno/archive/2007/11/04/949171.html

Windows系统Python直接调用C++ DLL

环境&#xff1a;Window 10&#xff0c;VS 2019&#xff0c; Python 2.7.12, 64bit 1&#xff0c;打开 VS 2019&#xff0c;新建C Windows 动态链接库工程 Example&#xff0c;加入下列文件&#xff0c;如果Python是64位的则在VS中 Solution platforms 选择 x64 编译成64位的 D…

用SD卡下载uboot、linux内核和文件系统

1、 移植mtd-utils: a) 下载utd-utils 下载地址为ftp://ftp.infradead.org/pub/mtd-utils/b) 交叉编译mtd-utilsi 修改Makefile CROSSarm-linux-ii makeiii 查看下mtd-utils-1.0.0目录下是否生成了咱们所需要大工具 (flashcp,nandwrite......等)。有工具生成了&#xf…

进行有效编辑的七种习惯

如果你的很多时间是用来敲纯文本&#xff0c;写程序或HTML&#xff0c;那么有效地使用一个好的编辑器能节省你不少时间。这篇文章里的指导和提示将有助于你更快工作&#xff0c;更少犯错误。 文中采用开源文本编辑器Vim(Vi IMproved)说明有效编辑的思想&#xff0c;但这些思想也…

最全的HTML特殊字符集

有些属于utf-8字符集&#xff0c;所以网页需要字符编码是utf-8才能显示全部字符。下面是来自不同的源&#xff0c;所以难免有重复的地方。 left single quote &lsquo;‘right single quote &rsquo;’single low-9 quote &sbquo;‚left double quote &ldquo;“r…

Desktop OS Market Share: Windows 90% - Mac 9% - Linux 1%

http://blog.tangcs.com/2008/12/14/desktop-os-market-share-2008/转载于:https://www.cnblogs.com/WarrenTang/archive/2008/12/14/1354704.html

css3中变形与动画(三)

transform可以实现矩阵变换&#xff0c;transition实现属性的平滑过渡&#xff0c;animation意思是动画&#xff0c;动漫&#xff0c;这个属性才和真正意义的一帧一帧的动画相关。本文就介绍animation属性。 animation属性通过一些关键帧中元素属性的改变来实现动画效果。当然也…

Lock“锁定”语句(C# 参考)

lock 关键字将语句块标记为临界区&#xff0c;方法是获取给定对象的互斥锁&#xff0c;执行语句&#xff0c;然后释放该锁。此语句的形式如下&#xff1a; 以带有颜色区分的格式查看复制到剪贴板打印Object thisLock new Object(); lock (thisLock) {// Critical code section…

个人代码库の自定义后缀名

usingMicrosoft.Win32; //操纵注册表的必要命名空间。namespacemyMethod{publicclassCreateSuffixName {//使程序获取被双击了的文件的路径,用到[Command]函数&#xff0c;可以[获取路径].///<summary>///创建自定义后缀名的方法。///</summary>///<param name&…

漂浮效果

<!doctype html> <html> <head> <title>漂浮效果</title> </head> <body> <div style"position:absolute;" onMouseOver"window.clearInterval(timer)" onMouseOut"creatTimer()"><img src&…

Scott Mitchell 的ASP.NET 2.0数据教程之四十四::DataList和Repeater数据分页

原文 | 下载本教程中的编码例子 | 下载本教程的PDF版 导言 分页和排序是显示数据时经常用到的功能。比如&#xff0c;在一个在线书店里搜索关于ASP.NET 的书的时候&#xff0c;可能结果会是成百上千&#xff0c;而每页只列出十条。而且结果可以根据title&#xff08;书名&#…

Python中的高级数据结构

http://blog.jobbole.com/65218/ 本文由 伯乐在线 - 熊崽Kevin 翻译自 pypix.com。欢迎加入技术翻译小组。转载请参见文章末尾处的要求。 数据结构 数据结构的概念很好理解&#xff0c;就是用来将数据组织在一起的结构。换句话说&#xff0c;数据结构是用来存储一系列关联数据的…

rails3系统架构

http://seamon.iteye.com/blog/1058510转载于:https://www.cnblogs.com/orez88/articles/2276821.html

如何理解 Objective-C Delegate

例如&#xff0c;我们要在一个 ViewController 中使用一个ActionSheet&#xff0c;代码如下&#xff1a; UIActionSheet *actionSheet [[UIActionSheet alloc]initWithTitle:"Delegate Example"delegate:self // telling this class to implement UIActionSheetDele…

必然的宿命,绚然的《暗花》

当开始相信宿命&#xff0c;开始相信看似偶然发生的突发事件自然由天注定时。那么&#xff0c;人的一生就只是一个由着有着来龙去脉的轨迹&#xff0c;不自主前行滚动的球儿。《暗花》里一个个都在掌握中巧妙设出的局&#xff0c;一层叠着一层&#xff0c;直至最后这种宿命感的…

抽象类的实际应用--模版设计

可以为抽象类实例化&#xff1a; package test1;abstract class Person { // 抽象类 Personprivate String name; // 封装属性nameprivate int age;// 封装属性agepublic Person(String name, int age) {// 构造函数 Person----方法名和类名一致this.name name;// 为name赋值t…

Gun N' Rose 小组分工、项目制品与贡献率计算

小组分工与贡献率计算 项目的具体工作有&#xff1a; 项目管理需求分析架构设计与实现模块设计与实现交互设计&#xff08;包括UI&#xff09;项目文档管理项目展示/答辩博客管理每位成员根据自己的能力和特长选择以上工作的一项或者多项来完成&#xff0c;每个工作项可由多个成…

jQuery 判断所有图片加载完成

对于图片的处理&#xff0c;例如幻灯片播放、缩放等&#xff0c;都是依赖于在所有图片完成之后再进行操作。 今天来看下如何判断所有的图片加载完成&#xff0c;而在加载完成之前可以使用 loading 的 gif 图表示正在加载中。 一、普通方法 监听 img 的 load 方法&#xff0c;每…

通过ClassLoader调用外部jar包

通过ClassLoader调用外部jar包 我们大家都知道&#xff0c;每个运行中的线程都有一个成员contextClassLoader&#xff0c;用来在运行时动态地载入其它类。 系统默认的contextClassLoader是systemClassLoader&#xff0c;所以一般而言java程序在执行时可以使用JVM自带的类、$JAV…