C++與C#混合編程


C++和C#混合編程

最近需要利用C++和C#混合編程,然后就寫了一個C#調用C++生成的DLL的DEMO。困擾我好久的就是C#中string類型在C++里面怎么表達,現在把C++生成DLL供C#調用的流程寫出來。

源碼:百度網盤

1、打開VS創建C++項目"C++_CScharp_DLL"

點擊確定之后接着點擊下一步:

然后選擇應用程序和附加選項:

點擊完成,C++的項目就新建好了。

2、添加代碼文件

右鍵項目,添加類,如下圖所示:

添加類之后會打開添加文件對話框,點擊添加即可,如下圖所示:

點擊確定之后進去下一個對話框,填寫文件名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,看是否報錯,成功結果如下圖:

3、添加測試程序:

在該解決方案中添加測試程序:

添加一個C#控制台測試程序:

添加完后設為啟動項:

添加引用:

將C++項目添加到C#的項目中:

4、編寫測試代碼

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();
        }
    }
}
復制代碼

現在就可以點擊調試按鈕調試了,調試結果如圖所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM