C 專案中呼叫C 生成的Dll 入門教程

2021-07-14 06:01:16 字數 2622 閱讀 8151

1、首先建立乙個c++ 的dll 專案(dll_cpp)並生成,會得到這三個檔案:

dll_cpp.dll   //動態庫

dll_cpp.lib   //靜態庫

dll_cpp.h    //標頭檔案

其中dll_cpp.h的**如下:

// 下列 ifdef 塊是建立使從 dll 匯出更簡單的

// 巨集的標準方法。此 dll 中的所有檔案都是用命令列上定義的 dll_cpp_exports

// 符號編譯的。在使用此 dll 的

// 任何其他專案上不應定義此符號。這樣,原始檔中包含此檔案的任何其他專案都會將

// dll_cpp_api 函式視為是從 dll 匯入的,而此 dll 則將用此巨集定義的

// 符號視為是被匯出的。

#ifdef dll_cpp_exports

#define dll_cpp_api __declspec(dllexport)

#else

#define dll_cpp_api __declspec(dllimport)

#endif

dll_cpp_api int add(int a,int b); //實現a+b

其中dll_cpp.cpp的**如下:

// dll_cpp.cpp : 定義 dll 應用程式的匯出函式。

//#include "stdafx.h"

#include "dll_cpp.h"

// 這是匯出函式的乙個示例。

dll_cpp_api int add(int a, int b)

2、建立乙個clr專案:dll_csharp

(1)將第1步中的三個檔案copy到dll_csharp 專案的目錄下:和dll_csharp.h同乙個資料夾。

(2)將dll_cpp.h新增到dll_csharp專案中,現在dll_csharp專案的目錄結構是這樣的:

(3)在dll_csharp.h 檔案中做如下修改。 新增:

#include//這是clr專案必須新增的標頭檔案

#include "dll_cpp.h"                 //這是託管的dll的標頭檔案

#pragma comment(lib," dll_cpp.lib") //這是需要託管的dll的靜態庫檔案

在生成的class1(這個類名可以隨便改)中新增需要託管的函式**。

如我們需要託管 add(int a, int b);這個函式,那麼dll_csharp.h的**如下:

// dll_csharp.h

#pragma once

#include //這是clr專案必須新增的標頭檔案

#pragma comment(lib,"dll_cpp.lib") //這是需要託管的dll的靜態庫檔案

#include "dll_cpp.h" //這是託管的dll的標頭檔案

using namespace system;

namespace dll_csharp ;

}

那麼dll_csharp.cpp的**如下:

// 這是主 dll 檔案。

#include "stdafx.h"

#include "dll_csharp.h"

namespace dll_csharp

}

(4)生成dll_csharp 這個專案會生成 dll_csharp.dll這個檔案

(5)測試:

(a)首先建立乙個c#的程式,如乙個控制台專案testdll_csharp

(b) 將 dll_cpp.dll、 dll_cpp.lib 和dll_csharp.dll這三個檔案copy到testdll_csharp專案目錄下(和program.cs同一目錄)

(c)新增對dll_csharp.dll的引用

(d)編輯program.cs的**如下:

using system;

using system.collections.generic;

using system.linq;

using system.text;

using system.threading.tasks;

using dll_csharp; //在這裡引入dll

namespace testdll_csharp}}

(e)編譯執行:

這裡面還涉及到型別轉換的問題,在使用的時候要注意。

ps:其實還有更簡單的方法,就是直接在clr專案中使用c++寫**,然後編譯成dll供c#呼叫。但這樣做會使得原始碼很容易被反編譯。

完整的專案**可以參見:c#專案中呼叫c++生成的dll 

C 呼叫C 生成的dll

本文將介紹c 中通過dll來呼叫c 首先建立c 的 類庫 工程cshapedll。然後輸入如下 csharp view plain copy c 通過dll呼叫c by morewindows using system using system.collections.generic using s...

C 生成dll呼叫

用visual c 生成的dll檔案已經和以前的dll檔案有了本質上的區別。用visual c 生成的dll檔案在程式設計中更多的表現為一種類 class 或者類庫 class library 製作乙個元件 1.首先建立乙個新類庫工程檔案 file new project visual c proj...

C入門 C呼叫DLL

header.h ifndef header h define header h include include include dll 02.h int maxint int,int void t1 void testdll void t2 void testdll01 impl.cpp incl...