gpt4 book ai didi

c++ - LoadLibrary 在 vi​​sual studio 2013 c++ 项目中永不返回

转载 作者:行者123 更新时间:2023-11-30 05:26:26 26 4
gpt4 key购买 nike

我写了一个静态库,它依赖于 3 个库 a.lib、b.lib、c.dll。现在我已经写了一个测试项目,它在这个项目上运行良好。但是还有另一个项目在它的一个 dll 中包含这个静态库,比如 x.dll,然后在项目中使用这个 dll。

现在,当项目尝试使用 LoadLibrary 加载 x.dll 时,它永远不会返回并继续等待。我将 c.dll b.lib 和 a.lib 都保存在同一位置,但仍然无法加载。尝试使用 dependency walker,但在包含此库之前和之后看不出有多大差异。

我应该如何确定问题所在?我是否可以在 .lib 中包含所有依赖项?我觉得因为它是静态库,所以它本身应该包含所有依赖项。在此先感谢您的帮助。该项目是visual studio 2013中的visual c++。

最佳答案

LoadLibrary 调用 DLL 文件的 DllMain()。它类似于 DLL 的 main()DllMain 中一定有什么东西死锁了。

注意:有时候DLL的代码中没有DllMain,但是编译器会自动创建一个用构造函数初始化全局变量,这也会导致问题。

为了澄清,您可以使用 LoadLibraryEx 并设置了 DONT_RESOLVE_DLL_REFERENCES。该标志将禁用 DllMain 并禁用加载依赖项。如果成功,则问题出在 DllMain 中。 (但是你现在不能使用 DLL,几乎所有现代 DLL 都在没有 DllMain 的情况下表现不正确)

要调试,你可以在Ntdll.LdrpCallInitRoutine上设置断点,DllMain()在这个函数中被调用。

关于c++ - LoadLibrary 在 vi​​sual studio 2013 c++ 项目中永不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37783581/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com