最近需要利用C++和C#混合編程渡嚣,然后就寫了一個(gè)C#調(diào)用C++生成的DLL的DEMO梢睛。困擾我好久的就是C#中string類型在C++里面怎么表達(dá),現(xiàn)在把C++生成DLL供C#調(diào)用的流程寫出來(lái)识椰。
源碼:百度網(wǎng)盤
1绝葡、打開(kāi)VS創(chuàng)建C++項(xiàng)目"C++_CScharp_DLL"
點(diǎn)擊確定之后接著點(diǎn)擊下一步:
然后選擇應(yīng)用程序和附加選項(xiàng):
點(diǎn)擊完成,C++的項(xiàng)目就新建好了腹鹉。
2藏畅、添加代碼文件
右鍵項(xiàng)目,添加類功咒,如下圖所示:
添加類之后會(huì)打開(kāi)添加文件對(duì)話框愉阎,點(diǎn)擊添加即可绞蹦,如下圖所示:
點(diǎn)擊確定之后進(jìn)去下一個(gè)對(duì)話框,填寫文件名Function,如下圖所示:
添加好后會(huì)生成h文件和cpp文件榜旦,如下圖所示:
Function.h文件代碼如下:
#pragmaonce#include publicrefclass Function
{public:
? ? Function(void);
? ? ~Function(void);
? ? int menber;
? ? intmenberFuncAdd(inta,int b);
? ? System::String^ say(System::String^ str);
};
Function.cpp文件代碼如下:
#include"Function.h"Function::Function(void)
{
}
Function::~Function(void)
{
}intFunction::menberFuncAdd(inta,int b)
{
? returna+b;
}
System::String^ Function::say(System::String^ str)
{
? return str;
}
填寫完后Function.h文件會(huì)報(bào)錯(cuò),錯(cuò)誤類型如下:
這里需要在C++項(xiàng)目里面設(shè)置幽七,讓動(dòng)態(tài)庫(kù)受到公共語(yǔ)言運(yùn)行時(shí)的支持。如下圖所示:
打開(kāi)項(xiàng)目屬性
修改完成后點(diǎn)擊項(xiàng)目右鍵生成DLL溅呢,看是否報(bào)錯(cuò)澡屡,成功結(jié)果如下圖:
3、添加測(cè)試程序:
在該解決方案中添加測(cè)試程序:
添加一個(gè)C#控制臺(tái)測(cè)試程序:
添加完后設(shè)為啟動(dòng)項(xiàng):
添加引用:
將C++項(xiàng)目添加到C#的項(xiàng)目中:
4藕届、編寫測(cè)試代碼
Program.cs文件代碼如下:
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test
{
? ? class Program
? ? {
? ? ? ? staticvoidMain(string[] args)
? ? ? ? {
? ? ? ? ? ? Function fun =new Function();
? ? ? ? ? ? Console.WriteLine(fun.menberFuncAdd(1,2));
? ? ? ? ? ? Console.WriteLine(fun.say("Hello World"));
? ? ? ? ? ? Console.ReadKey();
? ? ? ? }
? ? }
}
現(xiàn)在就可以點(diǎn)擊調(diào)試按鈕調(diào)試了,調(diào)試結(jié)果如圖所示:
源碼:百度網(wǎng)盤