Javascript 动态符号检索错误:Win32错误127-即使在导入自进程时也是如此

Javascript 动态符号检索错误:Win32错误127-即使在导入自进程时也是如此,javascript,node.js,windows,dynamic-linking,node-ffi,Javascript,Node.js,Windows,Dynamic Linking,Node Ffi,节点外部函数接口中最基本的示例是通过从节点自己的进程加载来调用atoi: var ffi = require('ffi'); var current = ffi.Library(null, { 'atoi': [ 'int', [ 'string' ] ] }); console.log(typeof current.atoi('1234')); // 1234 但我得到了这个错误: throw new Error('Dynamic Symbol Retrieval Error:

节点外部函数接口中最基本的示例是通过从节点自己的进程加载来调用
atoi

var ffi = require('ffi');

var current = ffi.Library(null, {
  'atoi': [ 'int', [ 'string' ] ]
});
console.log(typeof current.atoi('1234')); // 1234
但我得到了这个错误:

    throw new Error('Dynamic Symbol Retrieval Error: ' + this.error())
    ^

Error: Dynamic Symbol Retrieval Error: Win32 error 127
    at DynamicLibrary.get (D:\web\node_modules\ffi\lib\dynamic_library.js:112:11)
    at D:\web\node_modules\ffi\lib\library.js:50:19
    at Array.forEach (native)
    at Object.Library (D:\web\node_modules\ffi\lib\library.js:47:28)
    at Object.<anonymous> (D:\web\native\winapi.js:5:19)
    at Module._compile (module.js:541:32)
    at Object.Module._extensions..js (module.js:550:10)
    at Module.load (module.js:458:32)
    at tryModuleLoad (module.js:417:12)
    at Function.Module._load (module.js:409:3)
抛出新错误('Dynamic Symbol Retrieval Error:'+this.Error())
^
错误:动态符号检索错误:Win32错误127
在DynamicLibrary.get(D:\web\node\u modules\ffi\lib\dynamic\u library.js:112:11)
位于D:\web\node\u modules\ffi\lib\library.js:50:19
at Array.forEach(本机)
在Object.Library(D:\web\node\u modules\ffi\lib\Library.js:47:28)
反对。(D:\web\native\winapi.js:5:19)
在模块处编译(Module.js:541:32)
在Object.Module._extensions..js(Module.js:550:10)
在Module.load(Module.js:458:32)
在tryModuleLoad时(module.js:417:12)
在Function.Module.\u加载(Module.js:409:3)
显然,这与32/64位不兼容无关,因为我正在访问自己的进程。那么到底出了什么问题

  • 平台:Windows7x64
  • 节点:v6.2.2
  • 外国金融机构:2.2.0
  • 参考:1.3.3

ffi.library的第一个参数应该是您尝试加载的dll的名称,您遇到的错误与缺少的符号有关。

ffi.library的第一个参数应该是您尝试加载的dll的名称,您遇到的错误与缺少的符号有关。

Visual Studio使用cpp编译默认值,尝试用“extern c”包装dll函数,例如:

顺便说一句,外国金融机构的一个正确例子:

首先,安装ffi和节点gpy包 然后,在js代码中:

const ffi = require('ffi');
var libm = ffi.Library(__dirname + '/dll/add.dll', {
    'add': ['int', ['int', 'int']]
});

console.log(libm.add(1,2));

Visual Studio使用cpp编译默认值,尝试用“extern c”包装dll函数,例如:

顺便说一句,外国金融机构的一个正确例子:

首先,安装ffi和节点gpy包 然后,在js代码中:

const ffi = require('ffi');
var libm = ffi.Library(__dirname + '/dll/add.dll', {
    'add': ['int', ['int', 'int']]
});

console.log(libm.add(1,2));

最近,我还遇到了使用节点ffi加载DLL的错误。我的解决办法是:1。引入的DLL是否支持当前的计算机系统,如64位或32位。我以前犯过这个错误,当我将DLL文件转换为64位时,问题就解决了

最近,我还遇到了使用节点ffi加载DLL的错误。我的解决办法是:1。引入的DLL是否支持当前的计算机系统,如64位或32位。我以前犯过这个错误,当我将DLL文件转换为64位时,问题就解决了

根据文档,传递null表示您正在从自己的进程链接函数。该错误还可能与调用32位符号有关,尤其是在您自己没有加载库的情况下。当然,但我假设从当前运行的二进制文件加载符号不应导致x64与x32冲突。顺便说一句,它写在问题中。它也可能是符号可能具有的任何依赖性,当然,但这是项目网站上的基本示例。我尝试了更多的方法,但没有任何效果。根据文档,传递null表示您正在从自己的进程链接函数。该错误还可能与调用32位符号有关,尤其是在您自己没有加载库的情况下。当然,但我认为从当前运行的二进制文件加载符号不会导致x64与x32冲突。顺便说一句,它写在问题中。它也可能是符号可能具有的任何依赖性,当然,但这是项目网站上的基本示例。我尝试了更多的东西,但没有任何效果。