VS2015 創建C++ dll庫文件

 

最近在寫一個圖片處理,正好用到C++封裝DLL給C#調用,一下是總結:
 
創建一個C++的Win32DLL,這裏要注意選擇"Export symbols"導出符號。點擊完成。 以下圖所示   
  
 

因爲項目的名稱是"ImageAnalyzeAPI",所以,會自動生成ImageAnalyzeAPI.h和ImageAnalyzeAPI.cpp兩個文件,.h文件是要導出內容的聲明文件,爲了能清楚的說明問題,咱們將ImageAnalyzeAPI.h和ImageAnalyzeAPI.cpp兩個文件中的全部內容都刪除,而後在ImageAnalyzeAPI.h中添加以下內容:html

#define ImageAnalyze_API _declspec(dllexport)
EXTERN_C ImageAnalyze_API int _stdcall ImageAnalysis_GetBlurValue(int a,int b);

第一行代碼中定義了一個名爲"ImageAnalyze_API"的宏,該宏對應的內容是"__declspec(dllexport)"意思是將後面修飾的內容定義爲DLL中要導出的內容。固然你也能夠不使用這個宏,能夠直接將"__declspec(dllexport)"寫在要導出的函數前面。ios

 

第二行中的"EXTERN_C",是在"winnt.h"中定義的宏,在函數前面添加"EXTERN_C"等同於在函數前面添加extern "C",意思是該函數在編譯和鏈接時使用C語言的方式,以保證函數名字不變。函數

第二行的代碼是一個函數的聲明,說明該函數能夠被模塊外部調用,其定義實如今ImageAnalyzeAPI.cpp中,ImageAnalyzeAPI.cpp的代碼以下所示:ui

#include "stdafx.h"
#include "ImageAnalyzeAPI.h"

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <iostream>
#include "highgui.h"
#include "cvaux.h"

ImageAnalyze_API
float _stdcall ImageAnalysis_GetBlurValue(int a,int b)
{
return a+b;
}

 

第三步:spa

在編譯C++DLL以前,須要作如下配置,在項目屬性對話框中選擇"C/C++"|"Advanced",將Compile AS 選項的值改成"C++"。而後肯定,並編譯。htm

 

 

 

生成的DLL文件以下圖所示:blog

 

 

 

第四步:圖片

首先,添加一個C#的應用程序,若是要在C#中調用C++的DLL文件,先要在C#的類中添加一個靜態方法,而且使用DllImportAttribute對該方法進行修飾,我將C++的DLL文件放在C#項目下的DLL文件夾內,代碼以下所示:圖片處理

  [DllImport("DLL/ImageAnalyzeAPI", EntryPoint = "ImageAnalysis_GetBlurValue", CallingConvention = CallingConvention.Cdecl)]
   public static extern float ImageAnalysisGetBlurValue(string str, int contrastValue);

 

 

DllImport中的第一個參數是指明DLL文件的位置,第二個參數"EntryPoint"用來指明對應的C/C++中的函數名稱是什麼。"extern"關鍵字代表該處聲明的這個ImageAnalysis_GetBlurValue方法是一個外部調用。string

該方法聲明完畢以後,就能夠像調用一個普通的靜態方法同樣去使用了。

 

參考網址:http://jingyan.baidu.com/article/67508eb43f91869cca1ce49c.html

相關文章
相關標籤/搜索