什么是__declspec,我什么时候需要使用它?
我在我正在阅读的代码中看到__declspec的实例。 它是什么? 什么时候我需要使用这个构造?
这是C ++语言的一个Microsoft特定的扩展,它允许您将types或函数与存储类信息相关联。
文档
__declspec(C ++)
规范示例是__declspec(dllimport)
和__declspec(dllexport)
,它指示链接程序从DLL导入或导出(分别)符号。
// header __declspec(dllimport) void foo(); // code - this calls foo() somewhere in a DLL foo();
( __declspec(..)
只是包装微软的具体东西 – 为了达到兼容性,通常会用macros来包装它)
它主要用于将符号导出/导出到共享库(DLL)。 Visual C ++和GCC编译器都支持__declspec(dllimport)
和__declspec(dllexport)
。 其他用途(某些微软)logging在MSDN中 。
再举一个例子来说明__declspec关键字:
在编写Windows内核驱动程序时,有时需要使用内联汇编程序代码编写自己的序言/ epilog代码序列,因此可以使用naked属性声明函数。
__declspec( naked ) int func( formal_parameters ) {}
要么
#define Naked __declspec( naked ) Naked int func( formal_parameters ) {}
请参考裸(C ++)
从本质上讲,这是微软推出C ++扩展的方式,以便它们不会与将来的标准C ++扩展冲突。 使用__declspec,你可以对一个函数或类进行赋值; 确切的含义取决于__declspec的性质。 例如,__declspec(裸体)会抑制prolog / epilog的生成(对于中断处理程序,可embedded的代码等),__declspec(thread)将variables设置为线程本地等等。
__declspec属性的完整列表在MSDN上可用,并且因编译器版本和平台而异。