Windows&C:extern&__declspec(dllimport)

“extern”和“__declspec(dllimport”)之间的区别/关系是什么?我发现有时候有必要使用它们,有时候就足够了。

我是对的:

>“extern”是静态链接库,
>“__declspec(dllimport)”是为DLL(动态链接库),
>对于各自的链接类型,实际上都是相同的工作,
>当您使用导入库(帮助链接到dll的小型.lib文件)时,您需要同时使用?

extern表示实体具有外部链接,即在其翻译单元(C或CPP文件)之外可见。这意味着相应的符号将被放置在目标文件中,如果这个对象文件是静态库的一部分,它也将被看见。但是,extern本身并不意味着一旦对象文件成为DLL的一部分,该符号也将可见。

__declspec(dllexport)表示符号应该从DLL导出(如果它确实是DLL的一部分)。它在编译进入DLL的代码时使用。

__declspec(dllimport)表示符号将从DLL导入。它在编译使用该DLL的代码时使用。

因为在编译DLL本身以及将使用DLL的客户端代码时通常使用相同的头文件,所以习惯于在编译DLL和_​​_declspec(dllimport)时定义解析为__declspec(dllexport)的宏编译客户端,如下所示:

#if COMPILING_THE_DLL
    #define DLLEXTERN __declspec(dllexport)
#else
    #define DLLEXTERN __declspec(dllimport)
#endif

回答你的具体问题:

>是的,外部环境对静态库是足够的。
>是的 – 声明也需要一个extern(see explanation here)。>不完全 – 见上面。>你不需要使用__declspec(dllimport)的外部程序(见上面链接的解释),但是由于你通常使用相同的头文件,所以在编译时需要extern该DLL。

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...