参考网址:https://blog.csdn.net/tiankongtiankong01/article/details/80420033

SWIG (Simplified Wrapper and Interface Generator) 是用来为C和C++程序构造脚本语言接口的软件开发工具。SWIG 实际上是一个编译器,获取C/C++的声明,用一个壳包起来,以便通过其他语言访问这些声明。因此,SWIG 最大的好处就是将脚本语言的开发效率和 C/C++ 的运行效率结合起来。
一:准备源文件
文件1:EncryptTool.h
int EncryptFile(const char *szInputFile, const char *szOutputFile);
int DecryptFile(const char *szInputFile, const char *szOutputFile);
文件2:EncryptTool.cpp # 属于文件1的引用文件或者说是依赖包,后面动态链接将其封装起来
#include <iostream> using namespace std; int EncryptFile(const char *szInputFile, const char *szOutputFile)
{
char str[] = "jiami"; cout << "this is : " << str << endl;
} int DecryptFile(const char *szInputFile, const char *szOutputFile)
{
char str[] = "解密函数"; cout << "我是 : " << str << endl;
}
二:编写接口文件
文件3:EncryptTool.i(接口文件)
%module EncryptTool (定义模块名)
%{
#define SWIG_FILE_WITH_INIT
#include "EncryptTool.h"
%}
%include "EncryptTool.h" # 导入源文件
1.%module后面的名字是被封装的模块名称,Python通过这个名称加载程序。
2.%{...%}之间所添加的内容,一般包含此文件需要的一些函数声明和头文件。
3.最后一部分,声明了要封装的函数和变量。
三:封装代码
swig -python -c++ EncryptTool.i 四:生成动态链接库 setup.py文件
from distutils.core import setup, Extension #生成一个扩展模块
pht_module = Extension('_EncryptTool', #swig模块引用的模块名称,必须要有下划线
sources=['EncryptTool_wrap.cxx', #封装后的接口文件
'EncryptTool.cpp', #原始代码所依赖的文件
],
) setup(name = 'EncryptTool', #打包后的名称,也是我们python导包的名字
version = '0.1', # 版本号
author = 'SWIG Docs', # 封装作者
description = 'Simple swig pht from docs', # 描述信息
ext_modules = [pht_module], #与上面的扩展模块名称一致
py_modules = ['EncryptTool'], #需要打包的模块列表
) 五:安装到我们的python环境中
安装python3环境中:sudo python3 setup.py install
安装python2环境中:sudo python setup.py install

最新文章

  1. windows php 5.5 执行exe 不是有效的win32程序
  2. Mat转换为QImage
  3. Java Daemon 守护线程
  4. Android 学习资料收集
  5. json转换成对象
  6. cocos2d 3.6 win7下的配置
  7. Jpinyin笔记
  8. Simple JavaScript Inheritance--一个极简JS面向对象-类库
  9. hdu 3518 (后缀数组)
  10. React Native学习-控制横竖屏第三方组件:react-native-orientation
  11. SQL Server :事务和锁
  12. 初探html5---Video + DOM(视频播放)
  13. Mysql 存储过程、函数、触发器和视图的权限检查
  14. java 包中的一款经典的singleton模式
  15. 解决Eclipse中文乱码的方法
  16. aop代理方式引起的spring注入bean(实现类)与获取bean(实现类)出错
  17. Android开发9:网络访问&amp;Web服务开发
  18. Doctype 文档类型,标准模式,混杂模式
  19. Java中构造方法跟普通方法的区别?
  20. JVM调优之JMeter使用(三)

热门文章

  1. 基于windows 10打造的kali工具集
  2. h5和native测试时的区别
  3. error LNK2019: 无法解析的外部符号 _Direct3DCreate9@4,该符号在函数 "long __cdecl InitD3D(struct HWND__ *)" (?InitD3D
  4. wc.exe个人项目
  5. Docker 0x08: Docker 命令
  6. OpenSSL 安装 (Linux系统)
  7. 中国网络安全行业分类及全景图2019H1
  8. 201871010109-胡欢欢《面向对象程序设计(java)》第四周学习总结会
  9. nginx 缓存服务
  10. CentOS7 安装 vsftpd 服务