关于windows7文件管理工具库正确的是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于windows7文件管理工具库正确的是啥相关的知识,希望对你有一定的参考价值。

参考技术A Windows7文件管理工具库包括:文件夹选项、文件夹选项、文件夹属性、文件夹视图、搜索、回收站、文件管理器、磁盘碎片整理等。

“Windows 不支持正确的动态链接”是啥意思?

【中文标题】“Windows 不支持正确的动态链接”是啥意思?【英文标题】:What is meant by "Windows doesn't support proper dynamic linking?"“Windows 不支持正确的动态链接”是什么意思? 【发布时间】:2017-02-02 07:40:22 【问题描述】:

我已阅读有关 Linux 调用 dlopen()dlsym() 的文档,它们分别打开动态库并在库中加载符号。

这些调用似乎等同于 Windows 的 LoadLibrary()GetProcAddress()

我在这篇文章中读到“Windows 不支持正确的动态链接”:Running LLVM passes on Windows 10 gives no output in terminal?。

Linux 和 Windows 动态库调用不同的原因是什么?

Linux 上的动态库可以在可执行文件中加载符号的唯一区别是什么?但这意味着可执行文件也是 Linux 上的库,因为 dlopen() 在动态库上运行。

【问题讨论】:

【参考方案1】:

Windows确实支持正确的动态链接。不同之处在于 Windows 不支持 improper 动态链接,您可以将可执行文件链接到库(即错误的方式)。这个错误在 Windows 上是不可能的,因为它的可执行文件没有导出表。

也就是说,你的逻辑有点缺陷。即使在 Windows 上,可执行文件和动态库也没有太大区别。 LoadLibrary 实际上会加载可执行文件; GetProcAdddress 失败了。

至于插件逻辑,使用抽象(纯虚拟)类作为接口在 C++ 中很容易安排。

【讨论】:

你知道为什么 Windows 选择不为其可执行文件提供导出表吗? 你能链接它显示插件是如何用 C++ 制作的吗? 我猜你的意思是“你将一个库链接到一个可执行文件的地方”。 @Shuzheng:这是正确的方法。我明确地谈论了错误的方式,即您尝试将可执行文件与库链接。至于为什么Windows“选择”不拥有它,这表明默认是拥有这样一个表。但是这样的表只有在链接器创建它时才存在,并且是一个有意识的决定。所以正确的问题是为什么 Linux 和 UNIX 链接器选择创建导出表。 但是您可以使用从库 dll 中的可执行文件导出的函数。这些函数必须被dllexport'ed,然后只需创建一个导出库并在链接库dll时使用它。并且可执行文件必须是使用 dll 的那个。

以上是关于关于windows7文件管理工具库正确的是啥的主要内容,如果未能解决你的问题,请参考以下文章

使用仅标头库的正确方法是啥?

手机文件管理中的本地指的是啥

Windows下的文件名是啥编码的

Windows7中资源管理器的作用是啥?

关于存储器的叙述中正确的是啥

dll是啥文件格式