【发布时间】:2013-12-30 17:55:11
【问题描述】:
我需要创建一个 dll,其中包含我在 Visual Studio 2010 中的可执行项目中的内容。我意识到我可以在项目属性 >> 常规 >> '配置类型中更改项目配置,而不是创建一个 dll 项目' 到 'dll' 并且它构建得很好。它创建 dll。我添加了一个额外的 .h/.cpp 文件,其中包含我想要在 dll 中的导出功能。
我首先担心的是这是一个合法的 dll 吗?我正在尝试使用 LoadLibrary() 加载它,但我得到错误代码 126(找不到指定的模块),尽管 dll 在项目目录中(与可执行文件相同)。我只是想知道它是否与出于任何原因它可能不是完全合格的 dll 的事实有关?我的exe项目是MFC项目。
** 更新 **
感谢 cmets,我现在可以成功加载 dll - 这是依赖项问题。但是GetProcAddress() 不会为导出函数返回有效指针。 dumpbin /exports 实用程序显示 dll 没有导出功能!
所以我现在只将 .h/cpp 文件添加到具有简单虚拟导出功能的原始项目中。
__declspec(dllexport) int MakeDouble(int value);
为了以防万一,我还在应用程序类中包含了头文件。我想知道为什么这个函数不显示为导出?我该怎么办?
【问题讨论】:
-
它可能是一个合法的 DLL,但它是否有你想要的东西,或者它是否使用与你的其他项目相同的工具链,都是有待商榷的。你可以试试
dumpbin /exports <nameofdll> -
126 可能来自缺少的依赖项。看到那个答案:stackoverflow.com/a/14362289/1374704
-
@manuell 确实有其他依赖,好建议!
-
@manuell 说了什么。 depends.exe 是你的朋友!
-
当心 C++ 名称装饰!也许你想将函数声明为
__declspec(dllexport) extern "C"。
标签: c++ visual-studio-2010 dll mfc exe