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

时间:2014-06-23 08:56:53

标签: c++ visual-studio-2010 dllexport

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

项目A

  • Windows DLL
  • 取决于项目B

项目B

  • 编译为静态库

现在,如果是全局函数,例如createNewFoo项目B 中编译,它永远不会导出到最终的DLL中,尽管它是用dllexport声明的,最终的应用程序将其用作dllimport

namespace example
{
class __declspec(dllexport) Foo
{
  Foo();
};

__declspec(dllexport) Foo* createNewFoo();

}

}

请注意,类Foo始终会导出到最终的DLL中,它是唯一被丢弃的全局或静态函数。

此外,请注意,如果在项目A 而不是项目B 中编译,则始终会导出相同的全局函数。

Visual Studio 2010中是否有允许从依赖项目导出全局或静态函数的设置?或者这是工具的限制?

1 个答案:

答案 0 :(得分:1)

使用静态库是重用代码的好方法。不是在每个需要该功能的应用程序中重新实现相同的例程,而是在静态库中编写它们一次,然后从应用程序中引用它。从静态库链接的代码将成为您应用程序的一部分 - 您无需安装其他文件即可使用该代码。

在你的情况下,Lib B的功能被链接并成为DLL A的一部分,如果你想在DLL A中导出这些功能,你应该明确地 dllexport函数在DLL A中,在函数体中,你可以调用Lib B的函数来重用代码。