本文主要是介绍C++的dllexport和dllimportnbsp;nbsp;…,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
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
#
#else
#
#endif
class DLLExport Frame_Method
{
public:
}
void DLLExport drawrect(Rect rect);
//---------------------------------
红色代码是为了导出类而额外添加的。
#ifdef FRAME_METHOD_EXPORTS
#
#else
#
#endif
上面蓝色代码比红色代码少了(dellimport)
上面的蓝色代码一般可以替代红色代码,但是当类有静态成员变量时必须用红色代码,因为蓝色代码无法导出静态变量。
步骤五:
新建一个控制台应用程序调用该动态链接库,加入头文件#include "frame_method.h"即可使用该类。
这篇关于C++的dllexport和dllimportnbsp;nbsp;…的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!