导出函数__declspec(dllexport)导入函数__declspec(dllimport),浅显易懂的理解

一般而言,动态链接库中定义有两种函数:导出函数(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)

转自:https://blog.csdn.net/GVFDBDF/article/details/52204240

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值