详细的文件路径为:http://user.qzone.qq.com/1259374136/blog/1432887689

Swig学习教程

1.Swig的基本介绍

SWIG(Simplified Wrapper and Interface Generator)是一个非常优秀的开源工具,支持将C/C++代码与任何主流脚本语言相集成而进行联接开发。其原理是从C/C++头文件中找到申明并利用他们生成脚本语言访问C/C++代码所必须的封装代码。SWIG具有高度可自定义的特点,它能帮助你生成适合你的应用程序的封装包。

2.利用Swig转换C++代码为C#可用的代码

利用Swig转换C++代码为C#可用的代码,需要先部署Swig软件,然后利用Swig软件编译C++程序为dll和可调用dll的C#文件,最后在C#项目中添加生成的C#文件并且拷贝生成的dll到C#运行目录即可完成转换。下面按照此过程逐步的介绍。

2.1.Swig软件的安装部署

1)下载Swig软件,下载路径为http://www.swig.org/download.html,根据自己的操作系统选择相应的版本,我下载Windows版的

2)Swig软件下载完成后,解压软件到计算机,并且记录下目录;

3)在系统环境变量中添加解压的Swig软件的目录路径;Window7中操作过程如下所示,其他操作系统请问度娘;

4)在cmd命令界面中输入swig点击回车,若出现如下界面则Swig部署成功。(在运行中输入cmd点击回车就会弹出此界面)

2.2.C++代码的编写及C#可用代码的生成

1)启动VS,我的是2008版本,新建项目按照下图选择:

2)为新建的Win32项目添加Person类,如下所示:

Person.h文件中代码如下所示:

#pragma once

/// <summary>

/// 人类

/// </summary>

class Person

{

public:

/// <summary>

/// 标准构造函数

/// </summary>

/// <returns></returns>

Person(void);

/// <summary>

/// 构造函数

/// </summary>

/// <param name="birthYear">出生年份</param>

/// <returns></returns>

Person(int birthYear);

/// <summary>

/// 标准析构函数

/// </summary>

/// <returns></returns>

~Person(void);

/// <summary>

/// 获得出生年份

/// </summary>

/// <returns>出生年份</returns>

int GetBirthYear();

private:

/// <summary>

/// 出生年份

/// </summary>

int m_BirthYear;

};

Person.cpp文件中代码如下所示:

#include "Person.h"

/// <summary>

/// 标准构造函数

/// </summary>

/// <returns></returns>

Person::Person(void)

{

m_BirthYear=0;

}

/// <summary>

/// 构造函数

/// </summary>

/// <param name="birthYear">出生年份</param>

/// <returns></returns>

Person::Person(int birthYear)

{

m_BirthYear=birthYear;

}

/// <summary>

/// 标准析构函数

/// </summary>

/// <returns></returns>

Person::~Person(void)

{

}

/// <summary>

/// 获得出生年份

/// </summary>

/// <returns>出生年份</returns>

int Person::GetBirthYear()

{

return m_BirthYear;

}

3)创建Swig规则文件;

在新建的项目路径下新建一个txt文件,并修改扩展名为i;

添加新建的i文件到项目中,如下图所示;

编辑新建的.i文件,该文件式Swig文件转化C++的规则文件;

4)为项目添加编译后事件命令,转化C++代码为C#代码;

命令行中的命令如下图中红框内所示:

5)重新生成项目,会自动生成Wrap文件和C#代码文件,如下图;

6)添加Wrap文件到项目源文件中,如下图所示:

7)重新生成项目,找到项目生成的dll、lib文件备用;

2.3.C#代码的调用

1)新建C#项目,并且修改运行平台为X86,如下图所示;

2)添加2.2步骤5中生成的C#文件到新建的项目中,如下图所示;

3)拷贝2.2步骤7中生成的dll、lib等文件到新建C#项目的生成路径下,如下图所示;

4)在新建的C#项目的主程序中输入如下代码,并将C#项目设置为启动项,运行应用程序;

出现如下运行界面表示你成功在C#中调用了C++编写的代码。

3.特别声明:

以上是自己对Swig应用的简单测试,可能有自己理解不恰当的地方,欢迎各位大神交流指正。

参考:http://www.swig.org/translations/chinese/exec.html

http://cherishlc.iteye.com/blog/1689224

http://m.blog.csdn.net/blog/xiao_xiao_rory/5905771

下一步要测试string、数组等如何在Swig中应用,大家多多交流哦,我的QQ号1259374136

利用Swig转换C++代码为C#可用的代码的更多相关文章

  1. c#利用SWIG调用c++dll学习总结【转】

    开发环境: 操作系统:windows 7 IDE:Microsoft Visual Studio Professional 2015 SWIG: 3.0.12 swig的介绍 详细介绍可看官网,一下贴 ...

  2. json转换数据后面参数要带ture,代码

    强大的PHP已经提供了内置函数:json_encode() 和 json_decode().很容易理解,json_encode()就是将PHP数组转换成Json.相反,json_decode()就是将 ...

  3. 利用LibreOffice转换ppt、doc转化pdf

    利用LibreOffice转换ppt.doc转化pdf LibreOffice下载地址:  http://www.libreoffice.org/download/libreoffice-fresh/ ...

  4. mac 环境下 Quantlib 使用Swig 转换到java

    一.Mac安装boost方法:http://blog.csdn.net/xujiezhige/article/details/8230493 二.Swig,这里使用sudo install swig ...

  5. Android判断当前网络是否可用--示例代码

    Android判断当前网络是否可用--示例代码 分类: *07 Android 2011-05-24 13:46 7814人阅读 评论(4) 收藏 举报 网络androiddialogmanagern ...

  6. 如何利用好chrome控制台这个神器好好调试javascript代码

    上面的文章已经大致介绍了一下console对象具体有哪些方面以及基本的应用,下面简单介绍一下如何利用好chrome控制台这个神器好好调试javascript代码(这个才是我们真正能用到实处的地方) 1 ...

  7. PHP小程序后端支付代码亲测可用

    小程序后端支付代码亲测可用 <?php namespace Home\Controller; use Think\Controller; class WechatpayController ex ...

  8. final、static、代码块、静态代码块、内部类、代码执行顺序

    final final域使得确保初始化安全性(initialization safety)成为可能,初始化安全性让不可变形对象不需要同步就能自由地被访问和共享 作用在类上               ...

  9. 如何把if-else代码重构成高质量代码

    原文:https://blog.csdn.net/qq_35440678/article/details/77939999 本文提纲: 为什么我们写的代码都是if-else? 这样的代码有什么缺点? ...

随机推荐

  1. tp5.0 根据经纬度 获取附近信息

    自己备注一下 /* *参数说明: *$lng 经度 *$lat 纬度 *$distance 周边半径 默认是500米(0.5Km) */ public function returnSquarePoi ...

  2. Codeforces Round #555 (Div. 3) A B C1(很水的题目)

    A. Reachable Numbers 题意:设f(x)为 x+1 这个数去掉后缀0的数,现在给出n,问经过无数次这种变换后,最多能得到多少个不同的数. 代码 #include<cstdio& ...

  3. webService基本概念、元素及简单编码实现

    webService "网络服务"(Web Service)的本质,就是通过网络调用其他网站的资源. 网络服务是相对于本地服务来说的,本机完成本机需要完成的任务,叫"本地 ...

  4. c#中异步编程

    异步是现实生活中的很多现象的一种抽象.比如分工合作在很多时间段就是异步合作.异步中也一般要涉及委托方法.c#有3种模式的异步编程:异步模式,基于事件的异步模式,基于任务的异步模式(TAP). 一.   ...

  5. Android中通过xml改变背景及文字颜色

    原创文章,转载请注明出处,谢谢! 本篇主要介绍Android开发中,通过XML资源文件来设置控件在不同状态下的背景及文字颜色.关于xml改变背景及文字颜色的原理,大家可以去看一下郭霖大神的源码分析文章 ...

  6. 在linux上一行代码不用写实现自动采集+hadoop分词

    在linux上一行代码不用写实现自动采集+hadoop分词 将下面的shell脚本保存成到xxx.sh,然后执行即可 cd /opt/hadoop mkdir spider wget -O spide ...

  7. Unity 依赖注入

    关于Ioc的框架有很多,比如astle Windsor.Unity.Spring.NET.StructureMap,我们这边使用微软提供的Unity做示例,你可以使用Nuget添加Unity,也可以引 ...

  8. 【转载】伪静态SQL注入

    伪静态,主要是为了隐藏传递的参数名,伪静态只是一种URL重写的手段,既然能接受参数输入,所以并不能防止注入.目前来看,防止注入的最有效的方法就是使用LINQ.常规的伪静态页面如下:http://www ...

  9. 欢迎来到GIS思考者的博客www.gisthinker.com

    我是一名GIS爱好者,这是我的个人博客,欢迎点击: GIS思考者:www.gisthinker.com

  10. <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行.(小菜理解:的确看到好多,之前都不知道这是自执行匿名函数) 在详细了解这个之前,我们来谈了解一下 ...