- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我写了一个静态库,它依赖于 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 在 visual studio 2013 c++ 项目中永不返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37783581/
我是一名优秀的程序员,十分优秀!