【发布时间】:2016-01-26 19:43:47
【问题描述】:
我见过几个人有类似的问题,但到目前为止,这些修复都没有奏效。
我有一个 C# 应用程序(Windows 窗体)并且/我正在尝试使用 C++ clr dll。 dll 似乎加载得很好,我可以构建和运行应用程序,但是如果我调用 dll,程序会抛出 FileNotFound 异常“无法加载文件或程序集 'MyLibrary.dll' 或其依赖项之一。指定的模块可以找不到。":"MyLibrary.dll"。
最后一个错误是1008,Error_No_Token
dll 位于 exe 所在的文件夹中。
我一直在用 peverify 和 ildasm 检查东西,但没有发现任何问题。
我在它上面运行了dependency walker,并在日志中看到了这个不寻常的序列:
在地址 0x00007FFB93400000 处卸载“MYLIBRARY.DLL”。
LoadLibraryExW("C:\source\tools\ToolItemProj\ToolItem\ToolItem\bin\x64\Debug\MyLibrary.dll", 0x0000000000000000, LOAD_WITH_ALTERED_SEARCH_PATH) 返回 NULL。错误:找不到指定的模块(126)。
我已经在它上面运行了 ProcMon 并提出了几个整体,其中大多数都成功了,但是 QueryAllInformation 有一个 BufferOverflow 错误,并且 CreateFileMapping 失败(一次), FileLockedWithOnlyReaders (然后它再次运行并成功)。创建 INI 似乎也因 NameNotFound 而失败。
因此,由于缓冲区溢出,它看起来像是在运行时卸载 dll。但是,我该如何追踪呢?有人有这方面的经验吗?
【问题讨论】:
-
通常“找不到指定的模块”表示缺少某些 dll。您的 vcredist(x64) 是否安装正确? C++ dll 是否依赖于您可能忘记放在程序集目录或搜索路径下的任何内容?另外,C++ dll 是用 x64 编译的吗?