SWIG学习入门(一)

介绍

在我们实现底层接口过程中,常常为了跨平台性和性能,所以用C++去实现接口,并提供给上层的不同语言去调用,对于封装C++类库,当然有很多技术,比如我之前介绍的托管C++,但托管C++需要的工作量巨大,所以就有了这个技术SWIG,它能够将C++的接口提供给多种语言调用,包括C# Ruby python java等。

入门

环境:win10 VS2015

下载:官方路径 我的路径(3.0.12版本)

首先创建win32控制台项目 选择类库项目 勾选空项目
这里写图片描述
这里写图片描述
为项目添加 .h和 .cpp文件代码如下:

#pragma once

namespace cpluscplus
{
    class PlusPlusClass
    {
    public:
        int Add(int a, int b);
    };

}
#include "PlusPlusClass.h"

namespace cpluscplus
{
    int PlusPlusClass::Add(int a, int b)
    {
        return a + b;
    }
}

添加SWIG文件 SWIG_TEST.i:

%module SWIG_Tutorial1  

%{  
/* 在包装代码中包含头文件 */  
#include "PlusPlusClass.h"  
%}  

/* 解析头文件生成包装代码 */  
%include "PlusPlusClass.h

打开 .i文件属性,选择常规->项类型->自定义生成工具
这里写图片描述
然后选择自定义生成工具->常规->行命令
输入:
E:\DevEnv\swigwin-3.0.12\swig.exe -c++ -csharp -outdir “$(SolutionDir)interface” “%(FullPath)”
其中E:\DevEnv\swigwin-3.0.12\swig.exe为你的swig所在目录,同时要在解决方案目录下新建interface文件夹。
在输出中输入:%(Filename)_wrap.cxx;%(Outputs)
这里写图片描述
然后直接生成项目,查看项目文件夹可以看到生成了一个文件
这里写图片描述
将该文件添加到项目中,再次生成项目,可以看到interface文件夹中已经生成C#文件:
这里写图片描述
这里就算完成了。

下面我们进行测试:

在解决方案中添加C#控制台项目:
并将interface中的文件添加进来,同时编写main函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SWIG_Tutorial1_CSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            PlusPlusClass fromCPlusPlus = new PlusPlusClass();
            Console.WriteLine("来自C++的调用结果:" + fromCPlusPlus.Add(123, 1000));
            Console.ReadKey();
        }
    }
}

测试结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/bear_861110453/article/details/55802951