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


    详细的文件路径为: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

  • 相关阅读:
    Java爬取丁香医生疫情数据并存储至数据库
    mysql 获取昨天日期、今天日期、明天日期以及前一个小时和后一个小时的时间
    java.lang.UnsatisfiedLinkError: /usr/openv/java/jre/lib/amd64/libawt_xawt.so: libXtst.so.6: cannot open shared object file: No such file or directory
    Linux下打包压缩war、解压war包和jar命令
    Linux常用基本命令大全
    Git在eclipse中的配置
    CentOS 7 安装Rabbitmq
    Jmeter测试普通java类说明
    单例模式的7中写法
    Hyperledger Fabric 1.0 学习搭建 (五)--- 启动Fabric多节点集群
  • 原文地址:https://www.cnblogs.com/LiangXiaoBa/p/4538808.html
Copyright © 2020-2023  润新知