zoukankan      html  css  js  c++  java
  • VS2015 建立C++ dll库文件

     

    最近在写一个图片处理,正好用到C++封装DLL给C#调用,一下是总结:
     
    建立一个C++的Win32DLL,这里要注意选择"Export symbols"导出符号。点击完成。 如下图所示   
      
     

    由于项目的名称是"ImageAnalyzeAPI",因此,会自动生成ImageAnalyzeAPI.h和ImageAnalyzeAPI.cpp两个文件,.h文件是要导出内容的声明文件,为了能清楚的说明问题,我们将ImageAnalyzeAPI.h和ImageAnalyzeAPI.cpp两个文件中的所有内容都删除,然后在ImageAnalyzeAPI.h中添加如下内容:

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

    第一行代码中定义了一个名为"ImageAnalyze_API"的宏,该宏对应的内容是"__declspec(dllexport)"意思是将后面修饰的内容定义为DLL中要导出的内容。当然你也可以不使用这个宏,可以直接将"__declspec(dllexport)"写在要导出的函数前面。

     

    第二行中的"EXTERN_C",是在"winnt.h"中定义的宏,在函数前面添加"EXTERN_C"等同于在函数前面添加extern "C",意思是该函数在编译和连接时使用C语言的方式,以保证函数名字不变。

    第二行的代码是一个函数的声明,说明该函数可以被模块外部调用,其定义实现在ImageAnalyzeAPI.cpp中,ImageAnalyzeAPI.cpp的代码如下所示:

    #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;
    }
    

    第三步:

    在编译C++DLL之前,需要做以下配置,在项目属性对话框中选择"C/C++"|"Advanced",将Compile AS 选项的值改为"C++"。然后确定,并编译。

     

     

    生成的DLL文件如下图所示:

     

     

    第四步:

    首先,添加一个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方法是一个外部调用。

    该方法声明完毕之后,就可以像调用一个普通的静态方法一样去使用了。

    参考网址:http://jingyan.baidu.com/article/67508eb43f91869cca1ce49c.html

  • 相关阅读:
    elementui 修改合计行样式
    C# 导出Excel NPOI 修改指定单元格的样式 或者行样式
    向基于语义模型的操作集成的演变
    在制造业的工业2.0中应用MOM系统
    制造运营管理 (MOM) 的工作流驱动方法
    语义模型在智能工业运营中的作用
    定义运营系统架构
    在离散混合制造环境中应用制造运营模型
    面试官:如果存取IP地址,用什么数据类型比较好 (C#版本)
    使用WtmPlus低代码平台提高生产力
  • 原文地址:https://www.cnblogs.com/oceanwang/p/5355096.html
Copyright © 2011-2022 走看看