【问题标题】:I want to call a function which is written in "C" DLL from node.js javascript?我想从node.js javascript调用一个用“C”DLL编写的函数?
【发布时间】:2016-07-01 11:17:25
【问题描述】:

我想从 node.js javascript 调用一个用“C”DLL 编写的函数。我在 node.js 和电子中使用“ffi”模块。我要调用的函数是“int FDColor_GetSWVersion(char* softwareVersion)”。我正在使用以下代码:

 var libm = ffi.Library(__dirname + "\\viewmodels\\FDColor.dll", {
      'FDColor_GetSWVersion': [ 'int', ['string' ] ]
    });

但我收到错误“动态链接错误:Win32 错误 126”。谁能帮帮我

【问题讨论】:

  • 错误 126 是“找不到指定的模块”。确定你走对了路?
  • 路径正确。我认为问题应该是在函数(char * softwareVersion)中传递的参数类型,它与字符串不兼容。我不知道原因:(
  • @bzeaman 我已经安装了 .exe 并检查了结果,但没有追踪到这样的错误:(
  • 运行dumpbin /exports FDColor.dll -- FDColor_GetSWVersion 是否列出?

标签: javascript c node.js electron


【解决方案1】:

当您得到“找不到指定的模块”时,这是指您尝试加载的 DLL 或其任何依赖项。

您已经给出了ffi.Library 函数的完整路径,但是当 FDColor.dll 加载其依赖项时,它可能不会使用任何路径,这会导致 LoadLibrary 首先在进程的当前工作目录中查找,然后在PATH 环境变量的目录。

所以,

  1. 在 FDColor.dll 上使用 DependencyWalker (http://www.dependencywalker.com/) 来查看它是否有任何依赖关系。最好的方法是从调用此脚本的同一位置调用它(提供传递给 ffi.Library 的相同路径)。

  2. 对于它会尝试加载但未找到的每个 DLL,您需要将文件夹添加到调用此脚本的环境的 PATH 环境变量中。

  3. 在命令提示符下设置 PATH 后,您可以通过重复步骤 1 来检查您是否已完成此操作。 DependencyWalker 现在将显示它可以找到这些 DLL。

【讨论】:

  • 它显示错误“警告:未找到至少一个延迟加载依赖模块。警告:由于延迟加载依赖模块中缺少导出功能,至少一个模块具有未解析的导入。 "
  • 太棒了——继续进行第 2 步 :)——它可能有助于显示您的问题中发生的一些屏幕截图。
  • 在我创建示例时它正在工作。现在我已经在我的真实项目中实现了这个,它抛出了错误“未捕获的错误:动态链接错误:Win32 错误 193”。你能帮帮我吗?
  • 你应该提出一个新问题
  • 我已经创建了..请查看stackoverflow.com/questions/38843150/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-16
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多