为什么extern导出的函数不能导出?

时间:2014-03-24 21:54:28

标签: dll

我有一个创建DLL的Visual Studio 2008解决方案。它包括一个静态库。我了解到静态库中导出的“__declspec(dllexport)”函数不会通过DLL公开。我目前的解决方法是定义文件。我想知道的是因为只有声明需要导出为什么我不能在DLL项目中有一个标题,如下所示:

__declspec( dllexport ) function();

并在静态库的源文件中

 __declspec( dllexport ) function() { ...contents... }

当将静态库拉入DLL时,不应该使用声明来解析定义,并且声明会导致函数被导出吗?

我也尝试在声明中添加extern。

1 个答案:

答案 0 :(得分:0)

问题是链接器在构建DLL时会注意到DLL中的任何内容都不会调用该函数,也不会将其包含在DLL中。您将其标记为导出的事实不会影响链接器的决定。

通常的解决方法是在与导出函数相同的源文件中定义另一个函数,并从同一模块中的其他位置调用该函数(例如,DllMain)。这将确保链接器包含定义导出函数的模块。

Raymond Chen有piece about this on his blog