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...