gpt4 book ai didi

c++ - dllexport/dllimport 背后的推理?

转载 作者:搜寻专家 更新时间:2023-10-31 01:38:59 31 4
gpt4 key购买 nike

我只是 c++ 的初学者,对我来说这似乎是不必要的代码膨胀。我知道 dllimport/export 用于共享 dll 功能,但仅使用公共(public)/私有(private)访问器有什么问题?

如果我正在制作一个大型 dll 库,似乎我必须检查每个函数/类并确保将其导出。使用托管 dll(如来自 c#)我不需要做任何事情。将它导入到我的项目中,只要该函数是公共(public)的就可以访问它!

最佳答案

因为当您创建更大的 dll(或共享库)时,您可能希望将其组合成多个目标文件,但又不想在每个目标文件中公开所有公共(public)(对链接器)符号。也就是说,在某些情况下,一个符号在一个目标文件中是公共(public)的,其唯一目的是使其可用于同一库中的另一个目标文件。

请注意,publicprivate 访问器与对象文件中的私有(private)符号并不完全相同。对象文件中的私有(private)符号(使用全局 static 限定符创建的 fx)文件意味着该符号在对象文件之外根本不可见,而 private 访问器仅意味着无法从类外部访问符号(它仍然可以将其作为公共(public)对象文件放入目标文件中,因为它可以从另一个翻译单元中的同一类访问)。

如果你想导出目标文件中的所有公共(public)符号,可能有一种机制可以做到这一点,而不必诉诸明确地将每个符号标记为 dllexport - 你必须检查文档,显然有 a way在微软。

关于 dllimport 的故事,您可以在这里阅读:Why/when is __declspec( dllimport ) not needed?

关于c++ - dllexport/dllimport 背后的推理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32003015/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com