最近須要利用C++和C#混合編程,而後就寫了一個C#調用C++生成的DLL的DEMO。困擾我很久的就是C#中string類型在C++裏面怎麼表達,如今把C++生成DLL供C#調用的流程寫出來。編程
源碼:百度網盤測試
環境:win7+vs2010。spa
一、打開VS建立C++項目"C++_CScharp_DLL"3d
點擊肯定以後接着點擊下一步:調試
而後選擇應用程序和附加選項:code
點擊完成,C++的項目就新建好了。blog
二、添加代碼文件get
右鍵項目,添加類,以下圖所示:源碼
添加類以後會打開添加文件對話框,點擊添加便可,以下圖所示:string
點擊肯定以後進去下一個對話框,填寫文件名Function,以下圖所示:
添加好後會生成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(); } } }
如今就能夠點擊調試按鈕調試了,調試結果如圖所示:
異常狀況:
運行的時候若出現未處理的異常致使dll加載失敗,須要修改項目到對應的平臺
修改方法以下:
源碼:百度網盤