关键字:Python 2.7,VS 2010,swig

OS:Win8.1 with update。

1.下载swig:http://www.swig.org/download.html

2.将swig的路径添加到环境变量Path,例如set path=C:\swigwin-3.0.2。

3.用VS创建一个win32 console application名为MyApp并生成解决方案,编译生成MyApp.exe。

4.在MyApp解决方案里面新建一个win32 dll带导出符号项目名为MyDll,编译生成MyDll.dll。

5.在MyApp解决方案里面新建一个win32 dll空项目名为MyPython。

6.修改项目依赖关系。MyApp依赖于MyDll,MyPython依赖于MyDll。

7.修改CMyDll类的实现如下:

MyDll.h

#pragma once#include <string>
using namespace std;#ifdef MYDLL_EXPORTS
#define MYDLL_API __declspec(dllexport)
#else
#define MYDLL_API __declspec(dllimport)
#endif// This class is exported from the MyDll.dll
class MYDLL_API CMyDll {
public:CMyDll(void);virtual ~CMyDll() {}string SayHello(string name);double add(double i, double j);virtual string location();
};

MyDll.cpp

#include "stdafx.h"
#include "MyDll.h"CMyDll::CMyDll()
{return;
}string CMyDll::SayHello(string name)
{return "Hello " + name + ". I'm from " + location() + ".";
}double CMyDll::add(double i, double j)
{return i + j;
}string CMyDll::location()
{return "C++";
}

8.在MyPython项目里添加接口文件MyPython.i。

%module(directors="1") MyPython

%{
#include "../MyDll/MyDll.h"
%}

%feature("director") CMyDll;

%include <windows.i>
%include <std_string.i>
%include "../MyDll/MyDll.h"

9.在MyPython.i的属性设置里面设置Custom Build Tool。

10.编译MyPython.i生成MyPython.py和MyPython_wrap.cxx,把MyPython_wrap.cxx添加到工程MyPython,并设置工程如下,Build工程MyPython生成_MyPython.pyd.

11.添加TestMyPython.py如下,在_MyPython.pyd的文件夹目录下运行TestMyPython.py.

import MyPython
import oso = MyPython.CMyDll()
print(o.SayHello("World"))class MyPyDll(MyPython.CMyDll):def __init__(self):MyPython.CMyDll.__init__(self)def location(self):return "Python"o1 = MyPyDll();
print(o1.SayHello("World"))
os.system("pause")

运行结果如下:

Hello World. I'm from C++.
Hello World. I'm from Python.
Press any key to continue . . .

12.Run python in MyApp。

修改MyApp的工程属性,添加python头文件的文件夹,和lib文件的文件夹。

修改MyApp.cpp的代码如下:

#include "stdafx.h"#include <Python.h>int _tmain(int argc, _TCHAR* argv[])
{Py_Initialize();PyObject * pModule = PyImport_ImportModule("TestMyPython");Py_Finalize();return 0;
}

编译运行MyApp.exe,结果如下:

Hello World. I'm from C++.
Hello World. I'm from Python.
Press any key to continue . . .

源代码下载:https://github.com/ldlchina/CppPythonSwig/tree/839e3e50993d209c83c4b5c587369c98a8f05d5a

转载于:https://www.cnblogs.com/ldlchina/p/4014774.html

Python和C++交互相关推荐

  1. python基础指令-Python基础——与Python的指令交互

    Python是近几年兴起的一门编程语言,也是人工智能的主要语言,在TIOBE排行榜上占据着不错的位置,是许多程序员学习的对象,对于孩子来说,学习Python还是有些吃力的,我们需要从头开始一点点学起. ...

  2. python中和js交互_python和js交互调用的方法

    后台代码都是利用的 1.[get方式]使用jquery的get json与后台交互 前端js代码片段 var data= { 'a': $('input[name="a"]').v ...

  3. Python前后端交互( Flask Ajax )

    本文是自己学习Python前后端交互记录使用,之前没有学习过Python任何框架,前端也是简单学了一下,如哪里有问题,还望大家批评改正. 1. 前端 1.1 HTML布局 这个就不用说啥了,登录长啥样 ...

  4. Python 与数据库交互的封装(MySQL,SQLServer,SQLite)

    文章目录 Python与数据库交互原理 安装包 SqlBase.py __init__函数 common函数 select函数 insert函数 delete函数 update函数 create函数 ...

  5. python表单交互

    python表单交互 ​ 下载的静态网页总是返回相同的内容,而与网页交互,根据用户输入返回对应的内容.HTML定义了两种向服务器提交数据的方法,分别是GET和POST.使用GET方法时候,会将类似于查 ...

  6. SublimeText 4.0配置多版本的Python编译及交互环境

    SublimeText配置多版本的Python编译及交互环境 一.背景说明 1.当系统有多个python版本的时候,需要在sublime中设置和选择使用哪个版本. 2.由于sublime text下p ...

  7. python与mysql交互详解

    python与MySQL交互 一.数据准备 二.pymysql模块的使用 三.实例的介绍 1. 面向对象的方法 完成查询 2. 添加增加功能 3.查询-->包含sql注入 4.解决sql注入 四 ...

  8. python与word交互_Python基础——与Python的指令交互

    Python是近几年兴起的一门编程语言,也是人工智能的主要语言,在TIOBE排行榜上占据着不错的位置,是许多程序员学习的对象,对于孩子来说,学习Python还是有些吃力的,我们需要从头开始一点点学起. ...

  9. 【python MySQL 笔记】python和MySQL交互、操作

    [python MySQL 笔记]python和MySQL交互.操作 目录 1. 数据准备 2.  SQL演练 2.1 SQL语句强化练习 2.2. 将一个表拆为多个表 3. python操作MySQ ...

  10. Python与sql交互入门(mysql和sqlite)

    (以下所有操作使用的均为Mac系统+pycharm为IDE,需要有数据库理论基础和sql语法知识) 目录 1.终端sql操作(mysql数据库) --连接数据库 --退出数据库 --查看所有数据库 - ...

最新文章

  1. C++:while(getline())函数
  2. 软件测试的测什么,软件测试人员应具备哪些能力?
  3. poj3254 Corn Fields 状压DP入门
  4. 2018第九届蓝桥杯C/C++ B国赛 —— 第四题:调手表
  5. webstrom打开通过顶部浏览器打开网页,被跳转到默认主页
  6. 常见人工智能比赛平台总结
  7. 如何理解指向指针的指针?
  8. 小汤学编程之JavaScript学习day02——运算符、流程控制与循环、函数
  9. word文档怎么找回误删的文件_word文件数据恢复|word文件不小心删除怎么恢复?...
  10. HDU1023 Train Problem II【Catalan数】
  11. 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题
  12. 使用ASP的优势和劣势
  13. MYSQL基础八--子查询和连接
  14. eclipse中新建JSP文件时的编码设置
  15. 基于DEM,Lumion和WorldMachine的地形三维可视化
  16. 【入坑树莓派】烧录系统都烧录了三次(树莓派默认账户密码错误/已删除)
  17. 高中数学知识点总结:函数零点经典例题解题技巧与方法总结
  18. Mesh网络,让世界“雾”起来 | INE创始人熊羽睿演讲实录
  19. Java 已知三边求三角形求面积
  20. 序列化和反序列化的概念及应用

热门文章

  1. 【HDU5726】GCD(区间GCD查询+统计区间gcd为k的区间个数----线段树/st表+思维)
  2. pyppeteer-比 selenium 更高效的爬虫利器
  3. android代码设置digits,android:digits属性
  4. php 随机数据库,PHP实现随机一句功能
  5. c语言扎金花编程,一个C语言开发的炸金花纸牌游戏附带vs性能分析报告
  6. 算法:Gray Code 格雷码
  7. 单片机用C语言锯齿波,试用c语言编写一个能输出锯齿波信号的单片机c51程序
  8. 修改服务器编码和oracle编码,修改oracle 数据服务器编码
  9. 增加特征对预测准确率的影响
  10. 区域增长 matlab,图像分割 区域增长