将另一个DLL链接到项目后,无法加载c++ DLL
C++ DLL fails to load after linking another DLL to project
我使用Visual Studio 2010创建一个32位DLL作为第三方应用程序(AviSynth)的插件。DLL被第三方应用程序正确加载,直到我尝试使用FFTW (http://fftw.org) DLL。我使用了32位的FFTW DLL,运行"lib/def:libfftw3-3.def"来创建一个.lib文件,并将其添加为项目中的资源。对函数进行了一些调用。它编译得很好,但是当我尝试在第三方工具中加载它时,它失败了。
我试过把FFTW DLL放在我的DLL旁边,我也试过从我的DllMain里面使用LoadLibrary,但它仍然不起作用。
我能够在DllMain函数和AviSynth (AvisynthPluginInit2)调用的函数中停止调试器,但AviSynth声称无法在此之后加载DLL,并且之前调用的函数顶部的断点不再被击中。
AviSynth错误信息是:LoadPlugin:无法加载"C:Program Files (x86)AviSynth 2.5pluginsxxxMYPLUGINxxx.dll"
谢谢你的帮助。
当我得到类似这样的东西时,我尝试的第一件事是Dependency Walker:
http://www.dependencywalker.com/它不会捕获所有可能的问题,但它可以非常快速地检查简单的问题(丢失dll,丢失导出)。您还可以将其设置为通过双击打开任意数量的文件扩展名。我通常设置.dll, .ax, .ocx, .sys, .exe。
IMO 任何Windows开发人员必不可少的工具之一。
ps:如果Dependency Walker没有发现任何问题,尝试用LoadLibrary()
加载你的 DLL,看看GetLastError()
返回什么。
顺便说一句:
和我也尝试使用LoadLibrary从我的DllMain内,但它仍然不工作。
不能从DllMain()
呼叫LoadLibrary()
。
入口点函数应该只执行简单的初始化或终止任务。它不能调用LoadLibrary或LoadLibraryEx函数(或调用这些函数的函数),因为这可能会在DLL加载顺序中创建依赖循环。
(入口点函数是您的DllMain
)
结果是FFTW DLL必须与AVS脚本在同一目录中,而不是AVISynth插件目录。我猜那是Virtual Dub的工作目录。
不管怎样,它现在工作了。谢谢你的帮助!
- 从 wxWidgets 中的.DLL加载图标
- 视觉C++:在 DLL 加载期间,全局变量初始化顺序是否具有确定性?
- 无法使用c++/cli包装从c#dll加载函数
- 混合延迟 dll 加载和手动调用 LoadLibraryA 是否安全?
- 无法从 dll 加载函数
- 如何设置我的dll加载,该dll取决于Env-ailiable的某些第三部分DLL
- 将本机非托管的C DLL加载到托管的C#应用中,导致DLL输出垃圾
- 无法在 Python 3.5 上导入 cv2 DLL 加载失败
- 当使用“空dllmain”的dll加载链接到DLL时,应用程序无法启动(0xc0000142)
- 如何从DLL加载的DLL链接到函数
- 如何从Java中的C DLL加载和使用结构和功能
- 我可以用具有相同功能名称的多个DLL加载元素吗?
- 窗口挂钩和 dll 加载
- CEGUI-从DLL加载资源
- 什么可能导致时间函数和 DLL 加载之间死锁
- 以下代码是如何工作的(从DLL加载动态类)
- 错误:Visual Studio中没有为opencv_world310.dll加载符号
- 使用 LoadLibraryA 的 dll 加载错误
- 从 WinAPI C 项目中的专用 DLL 加载图像资源
- 模块"MyShellExt.dll"加载失败