通常,当我使用DLL时,在尝试加载时我会收到两种不同类型的错误消息:
无法找到指定的程序
找不到指定的模块
这两条消息有什么区别?
答案 0 :(得分:1)
"找不到模块"是一个简单的文件未找到的问题。您要求操作系统找到DLL并且无法找到它。不太直观的情况是它实际上无法找到所需的另一个另一个 DLL,一个你知道的DLL依赖于它。在配置文件模式或SysInternals'中使用装载程序快照或Dependency Walker进行故障排除进程监视器。
"未找到程序"是下一件可能出错的事情。 DLL已找到,但操作系统找不到您要调用的特定功能。 DLL地狱是常见的麻烦来源。非直观的情况是函数实际存在但其名称是装饰。例如,C ++名称为mangling。使用Dumpbin.exe / exports进行故障排除以查看导出的名称。
不在它结束的地方,加载DLL时自动运行的DllMain
入口点是一个麻烦制造者。各种错误代码尝试封装该函数抛出的SEH异常。装载机锁是臭名昭着的,它导致僵局冻结你的程序。这种灾难几乎总是需要调试器来发现潜在的问题。