今天不明白为什么大家在写动态库的时候,都要用到
#ifdef @@@@API
#else
#define @@@@ __declspec(dllimport)
#endif为什么明明是导出动态库,还要用到dllimport。
是因为别人用到我们提供的动态库的时候,会包含这个头文件,然后他们不会define @@@@API,所以会跳到else里面,他们需要导入,正好。
摘抄:
C++的dllexport和dllimport:
__declspec(dllexport)
声明一个导出函数,是说这个函数要从本DLL导出。我要给别人用。一般用于dll中省掉在DEF文件中手工定义导出哪些函数的一个方法。
__declspec(dllimport)
声明一个导入函数,是说这个函数是从别的DLL导入。我要用。一般用于使用某个dll的exe中 不使用__declspec(dllimport) 也能正确编译代码,但使用 __declspec(dllimport)使编译器可以生成更好的代码。编译器之所以能够生成更好的代码,是因为它可以确定函数是否存在于 DLL中,这使得编译器可以生成跳过间接寻址级别的代码,而这些代码通常会出现在跨 DLL 边界的函数调用中。但是,必须使用__declspec(dllimport) 才能导入 DLL 中使用的变量。

本文详细解释了C++中动态链接库(DLL)的导出和导入机制,重点介绍了__declspec(dllexport)和__declspec(dllimport)的作用及使用场景。这两种属性帮助开发者在DLL中声明对外公开的函数,并在其他项目中正确地引用这些函数。
1144

被折叠的 条评论
为什么被折叠?



