我有一个类似的设置,如下所述:
项目 A
- Windows 动态链接库
- 取决于项目B
项目 B
- 编译为静态库
现在,如果一个全局函数,例如createNewFoo
在 Project B 中编译,它永远不会导出到最终的 DLL 中,尽管它是用 dllexport
声明的并且最终的应用程序将它用作dllimport
:
namespace example
{
class __declspec(dllexport) Foo
{
Foo();
};
__declspec(dllexport) Foo* createNewFoo();
}
}
请注意,Foo
类总是导出到最终的 DLL 中,它唯一的全局或静态函数会以某种方式被丢弃。
此外,请注意,如果在 Project A 而不是 Project B 中编译,则始终会导出相同的全局函数。
Visual Studio 2010 中是否有任何设置允许从依赖项目导出全局或静态函数?或者这是工具的局限性?
最佳答案
使用静态库是重用代码的好方法。与其在每个需要该功能的应用程序中重新实现相同的例程,不如在静态库中一次性编写它们,然后从应用程序中引用它。从静态库链接的代码成为您应用程序的一部分——您无需安装另一个文件即可使用该代码。
如您所见,Lib B 的函数被链接并成为 DLL A 的一部分,如果您想在 DLL A 中导出这些函数,您应该显式 dllexport
函数在 DLL A 和函数体中,您可以调用 Lib B 的函数来重用代码。
关于c++ - 从 Windows DLL 中的多个项目导出全局函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361956/