一、C++類庫與C#類庫相互調用


1、C++調用C#類庫

1.准備C#類庫(dll文件)

1.1.創建C#類庫:

右擊項目類庫生成即可,

出現.dll(類庫)與.pdb(pdb文件包含了編譯后程序指向源代碼的位置信息,

用於調試的時候定位到源代碼,主要是用來方便調試的)兩個文件。

 設置僅僅生成.dll類庫,可以刪除.pdb文件

 

1.准備C++類庫(dll文件)

在VS2017中新建->項目->Visual C++->Windows桌面->動態鏈接庫;

在項目屬性中->常規中選擇無公共語言支持,即不創建托管C++類庫;

右鍵頭文件---》添加---》新建項(添加.h頭文件)
右鍵源文件---》添加---》新建項(添加.cpp源文件)

代碼分別:

mydll.h:

#pragma once
extern "C" _declspec(dllexport) int _stdcall add(int a,int b);

 mydll.cpp:

#include "stdafx.h"
#include "mydll.h"
int _stdcall add(int a, int b)
{
    return (a+b);
}

然后右鍵解決方案---》重新生成解決方案(先選擇Release)(已經生成動態庫了)

此路徑

 c#調用

using System;
using System.Runtime.InteropServices;

namespace ConsoleAppTemp
{
    class Program
    {
        [DllImport("DllTest.dll")] //DllImport 必須引用using System.Runtime.InteropServices;
        public static extern int add(int a, int b);

        //可以通過EntryPoint特性指定函數入口,然后為函數定義別名
        [DllImport("HelloWorldLib.dll", EntryPoint = "add")]
        public static extern int CustomName(int a, int b);
        static void Main(string[] args)
        {
            int a = add(1, 2);
            Console.WriteLine("輸出結果為:" + a.ToString());
            //跟上面是一樣的
            int b = add(1, 2);
            Console.WriteLine("輸出結果為:" + b.ToString());
            Console.ReadKey();
        }
    }
}

 打開前面C++庫生成的目錄,將HelloWorldLib.dll復制到C#工程的Debug目錄下。

也可以不復制,只需在引用dll的時候寫上完整路徑就行了。這里我是直接復制到Debug目錄下

 


免責聲明!

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



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