C++和C#混合編程
最近須要利用C++和C#混合編程,而後就寫了一個C#調用C++生成的DLL的DEMO。困擾我很久的就是C#中string類型在C++裏面怎麼表達,如今把C++生成DLL供C#調用的流程寫出來。html
源碼:百度網盤編程
一、打開VS建立C++項目"C++_CScharp_DLL"ide
點擊肯定以後接着點擊下一步:post
而後選擇應用程序和附加選項:測試
點擊完成,C++的項目就新建好了。url
二、添加代碼文件spa
右鍵項目,添加類,以下圖所示:3d
添加類以後會打開添加文件對話框,點擊添加便可,以下圖所示:調試
點擊肯定以後進去下一個對話框,填寫文件名Function,以下圖所示:code
添加好後會生成h文件和cpp文件,以下圖所示:
Function.h文件代碼以下:
#pragma once #include <string> public ref class Function { public: Function(void); ~Function(void); int menber; int menberFuncAdd(int a,int b); System::String^ say(System::String^ str); };
Function.cpp文件代碼以下:
#include "Function.h" Function::Function(void) { } Function::~Function(void) { } int Function::menberFuncAdd(int a,int b) { return a+b; } System::String^ Function::say(System::String^ str) { return str; }
填寫完後Function.h文件會報錯,錯誤類型以下:
這裏須要在C++項目裏面設置,讓動態庫受到公共語言運行時的支持。以下圖所示:
打開項目屬性
修改完成後點擊項目右鍵生成DLL,看是否報錯,成功結果以下圖:
三、添加測試程序:
在該解決方案中添加測試程序:
添加一個C#控制檯測試程序:
添加完後設爲啓動項:
添加引用:
將C++項目添加到C#的項目中:
四、編寫測試代碼
Program.cs文件代碼以下:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Test { class Program { static void Main(string[] args) { Function fun = new Function(); Console.WriteLine(fun.menberFuncAdd(1, 2)); Console.WriteLine(fun.say("Hello World")); Console.ReadKey(); } } }
如今就能夠點擊調試按鈕調試了,調試結果如圖所示: