c++ - 从 Windows DLL 中的多个项目导出全局函数?

标签 c++ visual-studio-2010 dllexport

我有一个类似的设置,如下所述:

项目 A

  • Windows 动态链接库
  • 取决于项目B

项目 B

  • 编译为静态库

现在,如果一个全局函数,例如createNewFooProject 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/

相关文章:

c++ - 找到具有 3 个变量的丢番图方程的一个特定解和解的数量的有效算法

c++ - 在 C++ 中将 uint64_t 转换为 void 类型的目的是什么?

C++ 符号导出

C++ 如何在 def 文件中指定命名空间

c# - 在 C# 中将字符串设置为图像源

c - 将 HANDLE 传递给 DLL

c++ - OpenGL 中的纹理渲染非常奇怪

c++ - 模乘反函数不适用于负数

visual-studio-2010 - 将文本文件作为本地资源包含在 exe 中

c# - 如何在 WinForms 和 C# 中创建下拉菜单