加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows&C:extern&__declspec(dllimport)

发布时间:2020-12-13 20:56:21 所属栏目:Windows 来源:网络整理
导读:“extern”和“__declspec(dllimport”)之间的区别/关系是什么?我发现有时候有必要使用它们,有时候就足够了。 我是对的: “extern”是静态链接库, “__declspec(dllimport)”是为DLL(动态链接库), 对于各自的链接类型,实际上都是相同的工作, 当您使用
“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。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读