如何找出DLL无法加载到不同程序的原因?

时间:2016-05-24 10:32:40

标签: c windows dll rust

一般问题

有没有办法找出DLL无法在程序中加载的原因?我在我和第三方软件中加载DLL时会定期遇到错误。有一个常用的方法可以解决这种情况,并确定特定系统上特定DLL的错误。

例如

我用Rust(x64,MSVC ABI)编译了一个简单的DLL:

use std::fs::File;
use std::io::Write;

#[no_mangle]
pub extern fn test_dll_call() -> u8 {
    let mut f = File::create("C:\\test.txt").unwrap();
    f.write(b"Hello, world!").unwrap();
    return 0
}

它是通过以下方式构建的:

cargo build --release

DependencyWalker在我的系统中显示了许多用于编译DLL的API-MS-WIN-CORE- * DLL:

  • API-MS-WIN-CORE-APIQUERY-L1-1-0.DLL
  • API-MS-WIN-CORE-程序兼容性-L1-1-1.DLL
  • API-MS-WIN-CORE-APPINIT-L1-1-0.DLL
  • API-MS-WIN-CORE原子-L1-1-0.DLL
  • ...

然而,在我的Windows 10 x64系统上,我已经安装了MS Visual Studio 2015和MS C ++ Redistributables 2005,2010,2012,2013和2015。

许多在DependencyWalker中缺少依赖项的DLL工作正常,所以我试图在Lua中使用我的DLL:

require("test");

function main()
    test.test_dll_call();
end

但是我得到了简洁的错误“循环或以前的错误加载模块'test'”。其他一些第三方DLL已经像魅力一样加载。如何检查我的DLL有什么问题?

0 个答案:

没有答案