zoukankan      html  css  js  c++  java
  • 导出函数__declspec(dllexport)

    一般而言,动态链接库中定义有两种函数:导出函数(export function)和内部函数(internal function)。 
    导出函数可以被其它模块调用,内部函数在定义它们的DLL程序内部使用。

    在要输出的函数、类、数据的声明前加上__declspec(dllexport)的修饰符,表示输出。

    有导出就有导入__declspec(dllimport),声明某个类、函数是从dll中导入的。

    实际情况下,通常有以下需求:

    使用一个方法或者类,一个是提供者,一个是使用者,二者之间的接口是头文件。头文件中声明了方法,在提供者那里方法应该被声明为__declspec(dllexport),在使用者那里,方法应该被声明为__declspec(dllimport)。

    二者使用同一个头文件,作为接口,怎么办呢?

    解决办法:

    使用条件编译:定义一个变量,针对提供者和使用者,设置不同的值。

    #ifndef __LABEL_IMAGE_VER1_API_H__
    #define __LABEL_IMAGE_VER1_API_H__
    
    #ifdef _LABEL_API_EXPORT_
    #define LABEL_IMG_API __declspec(dllexport)
    #else
    #define LABEL_IMG_API __declspec(dllimport)
    #endif
    #include <string>
    using std::string;
    
    class LABEL_IMG_API ImgLabel
    {
    public:
        ImgLabel(){}
        ImgLabel(const string& inpath);
        ~ImgLabel();
        int Start();
    
    };
    
    #endif // __LABEL_IMAGE_VER1_API_H__
    

      使用者未定义LABEL_IMG_API , 所以将ImgLabel声明为了__declspec(dllexport)

  • 相关阅读:
    [luogu p1996] 约瑟夫问题
    [luogu p1098] 字符串的展开
    [luogu p1035] 级数求和
    [luogu p1004] 方格取数
    [luogu p3383]【模板】线性筛素数
    [luogu p1223] 排队接水
    [luogu p1002] 过河卒
    [luogu p1001] A+B Problem
    Java BIO/NIO(Non-blocking I/O)详解
    Linux页框&伙伴算法以及slab机制
  • 原文地址:https://www.cnblogs.com/curo0119/p/8891284.html
Copyright © 2011-2022 走看看