gpt4 book ai didi

c++ - 为什么要使用 __declspec(dllexport)?似乎在没有它的情况下工作

转载 作者:太空狗 更新时间:2023-10-29 20:49:08 26 4
gpt4 key购买 nike

自从我用 C++ 编程以来已经有一段时间了,所以整个导出/导入的想法从我脑海中溜走了。

你能解释一下为什么要使用 __declspec(dllexport) & import thingy 如果看起来我可以使用其他库中的类而没有这些。

我在 VC++ 2005 中创建了一个解决方案,添加了控制台应用程序项目和两个 dll 库项目。然后在LibA中创建ClassA,在LibB项目中创建ClassB。

一旦我将 ClassA.h 和 ClassB.h 包含到我的控制台应用程序源代码中,并将它与 LibA.lib 和 LibB.lib 链接起来,我就能够在控制台应用程序中创建和使用 ClassA 和 ClassB 的实例.所以基本上我能够使用类而无需使用 __declspec 导出/导入它们。

你能解释一下吗 - 我在这里缺少什么。

最佳答案

Once I have included ClassA.h & ClassB.h into my console app source code, and has linked it with a LibA.lib and LibB.lib I was able to create and use instances of ClassA and ClassB in a console applicaiton.

这听起来像是您使用了静态链接。这在没有 __declspec(dllexport) 的情况下以与直接链接类的目标文件相同的方式工作。

如果您想使用 DLL 的动态(运行时)链接,您必须使用上述声明或指定导出函数的 DEF 文件。 DLL 包含一个导出表,其中列出了暴露给其他可执行文件的函数。所有其他函数都保留在您的 DLL 内部。

也许您对来自 Linux 世界的情况感到困惑,那里的情况恰恰相反:默认情况下,所有符号都在外部可见。

关于c++ - 为什么要使用 __declspec(dllexport)?似乎在没有它的情况下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1641172/

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