您的位置:首页 > 编程语言 > C语言/C++

C++的dllexport和dllimport  …

2017-06-29 10:15 267 查看
C++的dllexport和dllimport:

__declspec(dllexport)

声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中省掉在DEF文件中手工定义导出哪些函数的一个方法。当然,如果你的DLL里全是C++的类的话,你无法在DEF里指定导出的函数,只能用__declspec(dllexport)导出类

__declspec(dllimport)

声明一个导入函数,是说这个函数是从别的DLL导入。我要用。一般用于使用某个dll的exe中 不使用
__declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport)
使编译器可以生成更好的代码。编译器之所以能够生成更好的代码,是因为它可以确定函数是否存在于 DLL
中,这使得编译器可以生成跳过间接寻址级别的代码,而这些代码通常会出现在跨 DLL 边界的函数调用中。但是,必须使用
__declspec(dllimport) 才能导入 DLL 中使用的变量。

 

我在使用的过程一般都是用的__declspec(dllexport);

 

使用示例:

步骤一:

在VS2010中创建一个DLL项目例如:frame_method;

 

步骤二:

在frame_method中新建frame_method.h和frame_method.cpp。在.h文件中定义类,在.cpp中实现类。

注意:(类用这种方式导入,好像就不用再定义.def文件了)

 

步骤三:(查看,一般都会有,不知道为什么)

在frame_method-属性--配置属性--c/c++--预处理器--预处理器定义中找到FRAME_METHOD_EXPORT

 

步骤四:

在frame_method.h头文件中代码如下,红色表示加入的部分:

//-------------------------------

#ifdef FRAME_METHOD_EXPORTS

# define DLLExport _declspec(dllexport)

#else

# define DLLExport _declspec(dllimport)
#endif

class DLLExport Frame_Method

{

public:

    int
m;

    static
int n;

    void
func();

   
frame_method();

   
~frame_method();

}

void DLLExport drawrect(Rect
rect);

//---------------------------------

红色代码是为了导出类而额外添加的。

#ifdef FRAME_METHOD_EXPORTS

# define DLLExport _declspec(dllexport)

#else

# define DLLExport _declspec

#endif

上面蓝色代码比红色代码少了(dellimport)

上面的蓝色代码一般可以替代红色代码,但是当类有静态成员变量时必须用红色代码,因为蓝色代码无法导出静态变量。

 

步骤五:

新建一个控制台应用程序调用该动态链接库,加入头文件#include "frame_method.h"即可使用该类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: