Answers:
规范示例是__declspec(dllimport)
和__declspec(dllexport)
,它们指示链接程序分别(从)向DLL导入符号或向DLL导出符号。
// header
__declspec(dllimport) void foo();
// code - this calls foo() somewhere in a DLL
foo();
(__declspec(..)
只包装了Microsoft的特定内容-为了实现兼容性,通常会用宏将其包装掉)
.lib
找到的第一个具有匹配的导出符号的链接器。
本质上,这就是Microsoft引入其C ++扩展的方式,这样它们就不会与将来的标准C ++扩展冲突。使用__declspec,您可以为函数或类赋予属性。确切的含义因__declspec的性质而异。例如,__declspec(naked)禁止生成序言/后记(对于中断处理程序,可嵌入代码等),__declspec(thread)使变量成为线程局部变量,依此类推。
__declspec属性的完整列表在MSDN上可用,并且随编译器版本和平台的不同而不同。
GCC 4.2
,除了是提供替代他们__attribute__ ((dllexport))
来__declspec(dllexport)
,是公平的呼吁__declspec
,微软只延长?
我知道已经八年了,但是我想分享在MRuby中发现的这段代码,该代码展示了如何__declspec()
在与蜜蜂相同的水平上使用bee export keyword
。
/** Declare a public MRuby API function. */
#if defined(MRB_BUILD_AS_DLL)
#if defined(MRB_CORE) || defined(MRB_LIB)
# define MRB_API __declspec(dllexport)
#else
# define MRB_API __declspec(dllimport)
#endif
#else
# define MRB_API extern
#endif
__declspec(dllexport)
在库中的每个函数之前添加