Visual Studio 2017 + C# + C++ and swig

一、下載swig程序

http://swig.org/download.html


二、VS2017中創建C# 控制檯程序



三、創建C++的動態庫文件



然後點擊「Ok」按鈕,創建C++項目

四、創建C++文件

文件cpp_file.h

#pragma once


#define CPP_EXPORTS


#ifdef CPP_EXPORTS
#define CPP_API __declspec(dllexport)
#else
#define CPP_API __declspec(dllimport)
#endif // 


class CPP_API cpp_file
{
public:
cpp_file(void);
~cpp_file(void);


int times2(int arg);
};


文件cpp_file.cpp



#include "cpp_file.h"


cpp_file::cpp_file(void)
{


}


cpp_file::~cpp_file(void)
{


}


int cpp_file::times2(int arg)
{
return arg * 2;
}

然後編譯cpp的項目,是可以編譯通過的。

在cpp_file.h的同一個目錄下,創建swig文件,cpp_file.i,內容如下:

%module cpp
 
%{
    #include "cpp_file.h"
%}
 
%include <windows.i>
%include "cpp_file.h"


五、生成csharp和cpp文件。

swig.exe -csharp -c++ -outdir E:\work\test\testSWIG\csharp\swigcsharp\swig\gen  cpp_file.i


六、將cpp_file_wrap.cxx加入到cpp項目,重新編譯

然後將生成的cpp.dll文件拷貝到csharp項目的bin目錄下。


七、將生成的cpp.cs, cpp_file.cs, cppPINVOKE.cs添加到csharp的項目文件裏面



八、編寫調用代碼

    class Program
    {
        static void Main(string[] args)
        {
            cpp_file file = new cpp_file();
            int result = file.times2(20);


            Console.WriteLine("result = " + result.ToString());
            Console.ReadLine();
        }
    }


九、編譯運行

輸出的結果:

result = 40