天天看點

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

一、下載下傳swig程式

http://swig.org/download.html

二、VS2017中建立C# 控制台程式

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

三、建立C++的動态庫檔案

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

然後點選“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的項目檔案裡面

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

八、編寫調用代碼

    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

繼續閱讀