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

相关文章
相关标签/搜索