代码“DECLDIR __declspec(dllexport)”究竟做了什么?
#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
代码DECLDIR __declspec(dllexport)
究竟做了什么?代码“DECLDIR __declspec(dllexport)”究竟做了什么?
它将DECLDIR
宏定义定义为__declspec(dllexport)
。 dllexport
用于从DLL导出函数。下面是从this page报价:
这些属性明确定义 DLL的接口,它的客户端,这 可以是可执行文件或其他 DLL。将函数声明为dllexport 不需要 模块定义(.DEF)文件,至少在 规范的导出函数中。 请注意,dllexport取代了 __export关键字。
如果一个类被标记 declspec(DLLEXPORT),类模板在 的类层次结构的任何 特隐含 标记为declspec(DLLEXPORT)。此 表示模板明确地 实例化,其成员必须是 定义。
__declspec
,顺便说一句,是explained here。
在微软的世界里,__declspec(dllexport)
使一个函数或类可以从DLL外部调用。
当您创建DLL时,默认情况下,DLL中定义的任何函数只能从同一个DLL中调用。您不能从可执行文件或其他DLL调用该函数。
如果您希望从DLL外部调用函数,则需要通过添加__declspec(dllexport)
将其导出。
想一想的一种方法是__declspec(dllexport)
将函数标记为DLL公共接口的一部分。
虽然你没有问关于__declspec(dllimport)
是相反的。当在一个不同的DLL中调用一个函数时,你的DLL需要知道它是不同DLL的公共接口的一部分,所以它可以正确处理这个调用(调用另一个DLL中的函数需要更复杂的代码来调用你自己的函数)。
@deepak:欢迎来到'StackOverflow'!我格式化了您的代码(选择它并按下Ctrl + K)。 – 2010-02-20 07:48:47