导出函数__declspec(dllexport)

来源:互联网 发布:梦幻诛仙手游软件礼包 编辑:程序博客网 时间:2024/05/21 19:29

一般而言,动态链接库中定义有两种函数:导出函数(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__
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

原创粉丝点击