使用节点 ffi 调用 setDllDirectory

calling setDllDirectory using node ffi

我正在使用节点 ffi 模块来调用我自己的 dll 中的本机 windows 函数。我的 dll 依赖于同一目录中的其他一些第三方 dll。

问题是加载 dll 后调用

   var myfunc = ffi.Library("myLibrary", {"test":["string",["string"]]})

找不到myLibrary依赖的第三方dll,虽然它们在同一个目录。我试图通过这样做在此行之前调用 setDllDirectory:

  var setdl = ffi.Library("kernel32", {'SetDllDirectory':["bool",["string"]]})

然后调用 setdl。但是我在上面的 setdl 行中遇到错误:

 Uncaught Error: Dynamic Symbol Retrieval Error: Win32 error 127(…)

我该如何解决这个问题?

错误 127 是 ERROR_PROC_NOT_FOUND ("The specified procedure could not be found")。

SetDllDirectory()函数有两个版本:

  • SetDllDirectoryA 用于 ANSI。
  • SetDllDirectoryW 用于 Unicode。

DLL 不导出实际名为 SetDllDirectory() 的函数,因此出现错误。它导出其他两个函数。

此信息在 documentation: