描述我遇到的问题需要太长时间,但最尖锐的问题是:
给定有效路径时,LoadLibraryW 失败(返回 nullptr)。
Process Monitor 没有记录任何可疑的故障,或者确实与它成功加载 dll 时的任何不同(它可以在另一个上下文中)。
dll 没有非系统依赖项。
...最糟糕的是,GetLastError 返回的 Windows 错误代码是 3221225619。
假设 3221225619 不是有效的错误代码,那么会出现什么问题以至于 Windows 甚至没有错误代码呢?
编辑:
我认为有些人想要更多关于失败本身的细节:
- 它似乎不是输入 - 它在工作和失败版本中是相同的,并且当输入字符串被破坏时,LoadLibraryW 已成功声明“文件不存在”。当前输入已硬编码,几乎没有出错的余地。
- dll在Release中编译,调用代码在Debug中。我已经这样做了 18 个月没有问题,但你永远不知道。
- Process Monitor 包报告了大约 30 个在 LoadLibraryW 中运行的内部操作,包括 CreateFile、LoadImage、RegOpenKey。这些对于工作调用和失败调用是相同的,具体到文件大小和内存位置。
- 在调用它的 C++ 对象中没有明显的内存损坏,正如我所说,Process Monitor 在两种情况下都提供相同的基本映像地址。
- 失败是 100% 一致的——每次都是同一时间,同一地点。