Python和C++交互
关键字: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++交互相关推荐
- python基础指令-Python基础——与Python的指令交互
Python是近几年兴起的一门编程语言,也是人工智能的主要语言,在TIOBE排行榜上占据着不错的位置,是许多程序员学习的对象,对于孩子来说,学习Python还是有些吃力的,我们需要从头开始一点点学起. ...
- python中和js交互_python和js交互调用的方法
后台代码都是利用的 1.[get方式]使用jquery的get json与后台交互 前端js代码片段 var data= { 'a': $('input[name="a"]').v ...
- Python前后端交互( Flask Ajax )
本文是自己学习Python前后端交互记录使用,之前没有学习过Python任何框架,前端也是简单学了一下,如哪里有问题,还望大家批评改正. 1. 前端 1.1 HTML布局 这个就不用说啥了,登录长啥样 ...
- Python 与数据库交互的封装(MySQL,SQLServer,SQLite)
文章目录 Python与数据库交互原理 安装包 SqlBase.py __init__函数 common函数 select函数 insert函数 delete函数 update函数 create函数 ...
- python表单交互
python表单交互 下载的静态网页总是返回相同的内容,而与网页交互,根据用户输入返回对应的内容.HTML定义了两种向服务器提交数据的方法,分别是GET和POST.使用GET方法时候,会将类似于查 ...
- SublimeText 4.0配置多版本的Python编译及交互环境
SublimeText配置多版本的Python编译及交互环境 一.背景说明 1.当系统有多个python版本的时候,需要在sublime中设置和选择使用哪个版本. 2.由于sublime text下p ...
- python与mysql交互详解
python与MySQL交互 一.数据准备 二.pymysql模块的使用 三.实例的介绍 1. 面向对象的方法 完成查询 2. 添加增加功能 3.查询-->包含sql注入 4.解决sql注入 四 ...
- python与word交互_Python基础——与Python的指令交互
Python是近几年兴起的一门编程语言,也是人工智能的主要语言,在TIOBE排行榜上占据着不错的位置,是许多程序员学习的对象,对于孩子来说,学习Python还是有些吃力的,我们需要从头开始一点点学起. ...
- 【python MySQL 笔记】python和MySQL交互、操作
[python MySQL 笔记]python和MySQL交互.操作 目录 1. 数据准备 2. SQL演练 2.1 SQL语句强化练习 2.2. 将一个表拆为多个表 3. python操作MySQ ...
- Python与sql交互入门(mysql和sqlite)
(以下所有操作使用的均为Mac系统+pycharm为IDE,需要有数据库理论基础和sql语法知识) 目录 1.终端sql操作(mysql数据库) --连接数据库 --退出数据库 --查看所有数据库 - ...
最新文章
- C++:while(getline())函数
- 软件测试的测什么,软件测试人员应具备哪些能力?
- poj3254 Corn Fields 状压DP入门
- 2018第九届蓝桥杯C/C++ B国赛 —— 第四题:调手表
- webstrom打开通过顶部浏览器打开网页,被跳转到默认主页
- 常见人工智能比赛平台总结
- 如何理解指向指针的指针?
- 小汤学编程之JavaScript学习day02——运算符、流程控制与循环、函数
- word文档怎么找回误删的文件_word文件数据恢复|word文件不小心删除怎么恢复?...
- HDU1023 Train Problem II【Catalan数】
- 设置UITableView的separatorInset值为UIEdgeInsetsZero,分隔线不最左端显示的问题
- 使用ASP的优势和劣势
- MYSQL基础八--子查询和连接
- eclipse中新建JSP文件时的编码设置
- 基于DEM,Lumion和WorldMachine的地形三维可视化
- 【入坑树莓派】烧录系统都烧录了三次(树莓派默认账户密码错误/已删除)
- 高中数学知识点总结:函数零点经典例题解题技巧与方法总结
- Mesh网络,让世界“雾”起来 | INE创始人熊羽睿演讲实录
- Java 已知三边求三角形求面积
- 序列化和反序列化的概念及应用
热门文章
- 【HDU5726】GCD(区间GCD查询+统计区间gcd为k的区间个数----线段树/st表+思维)
- pyppeteer-比 selenium 更高效的爬虫利器
- android代码设置digits,android:digits属性
- php 随机数据库,PHP实现随机一句功能
- c语言扎金花编程,一个C语言开发的炸金花纸牌游戏附带vs性能分析报告
- 算法:Gray Code 格雷码
- 单片机用C语言锯齿波,试用c语言编写一个能输出锯齿波信号的单片机c51程序
- 修改服务器编码和oracle编码,修改oracle 数据服务器编码
- 增加特征对预测准确率的影响
- 区域增长 matlab,图像分割 区域增长