#ifndef _DLL_TUTORIAL_H_
#define _DLL_TUTORIAL_H_
#include <iostream>
#if defined DLL_EXPORT
#define DECLDIR __declspec(dllexport)
#else
#define DECLDIR __declspec(dllimport)
#endif
extern "C"
{
DECLDIR int Add( int a, int b );
DECLDIR void Function( void );
}
#endif
Run Code Online (Sandbox Code Playgroud)
代码到底是DECLDIR __declspec(dllexport)做什么的?
在Microsoft世界中,__declspec(dllexport)使函数或类可以从DLL外部调用.
在创建DLL时,默认情况下,DLL中定义的任何函数只能从同一DLL中调用.您无法从可执行文件或其他DLL调用该函数.
如果您希望从DLL外部调用函数,则需要通过添加来导出它__declspec(dllexport).
考虑它的一种方法是将__declspec(dllexport)函数标记为DLL的公共接口的一部分.
虽然你没有问__declspec(dllimport)这个是相反的.在不同的DLL中调用函数时,您的DLL需要知道它是不同DLL的公共接口的一部分,因此它可以正确处理调用(在不同的DLL中调用函数需要更复杂的代码来调用自己的函数).
它将DECLDIR宏常量定义为__declspec(dllexport)。dllexport用于从 DLL 导出函数。这是此页面的引用:
这些属性显式定义 DLL 与其客户端的接口,客户端可以是可执行文件或另一个 DLL。将函数声明为 dllexport 消除了对模块定义 (.DEF) 文件的需要,至少在导出函数的规范方面是如此。请注意,dllexport 替换了 __export 关键字。
如果类被标记为 declspec(dllexport),则类层次结构中类模板的任何特化都会隐式标记为 declspec(dllexport)。这意味着模板是显式实例化的,并且必须定义其成员。
__declspec顺便在这里解释一下。
| 归档时间: |
|
| 查看次数: |
3765 次 |
| 最近记录: |