为什么要使用__declspec(dllexport)?似乎没有它工作

Kev*_*vin 3 c++ visual-studio-2005 visual-c++

我用C++编程已经有一段时间了,所以整个导出/导入的想法从我的脑海中消失了.

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

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

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

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

mkl*_*uwe 5

一旦我将ClassA.h和ClassB.h包含在我的控制台应用程序源代码中,并将其与LibA.lib和LibB.lib链接,我就能够在控制台应用程序中创建和使用ClassA和ClassB的实例.

这听起来像你使用静态链接.这__declspec(dllexport)与直接链接到类的目标文件的方式不同.

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

也许你很困惑来自Linux世界,情况恰恰相反:默认情况下,所有符号都在外部可见.