node-ffi: 如何使用VS2010 IDE生成出来的dll
发布于 8 年前 作者 topwood 7584 次浏览 来自 问答
// add.c
#include "add.h"
int add(int a,int b) {
  return a+b;
}
//add.h
#include "add.h"

int add(int a,int b) {

  return a+b;
}

我用vs自带的命令行工具,参考node-ffi的example,cl.exe /D_USRDLL /D_WINDLL F:\TestSpace\ffi\test\add.c /link /DLL /OUT:F:\TestSpace\ffi\test\add.dll 这样生成的dll在node里面用ffi调用是没问题的,正确输出了6:

//app.js
var ffi = require('ffi');

var libm = ffi.Library(__dirname+'\\add.dll', {
  'add': [ 'int', [ 'int','int' ] ]
});
var a = libm.add(1,5); // 输出6
console.log(a);

但是我用VS IDE新建dll项目生成出来的Dll,用上面的方法调的时候,出现了这样的错误提示:

F:\TestSpace\ffi\test>node app.js

F:\TestSpace\ffi\test\node_modules\ffi\lib\dynamic_library.js:74
    throw new Error('Dynamic Linking Error: ' + err)
          ^
Error: Dynamic Linking Error: Win32 error 193
    at new DynamicLibrary (F:\TestSpace\ffi\test\node_modules\ffi\lib\dynamic_li
brary.js:74:11)
    at Object.Library (F:\TestSpace\ffi\test\node_modules\ffi\lib\library.js:45:
12)
    at Object.<anonymous> (F:\TestSpace\ffi\test\app.js:3:16)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:935:3

我在node-ffi的issue里提了一个问题,作者说我编译生成dll的时候出问题了,应该是我用VS的方式有问题,难道不是新建一个空的dll项目然后生成解决方案? 跪求高手解救。。

1 回复

用 ViewDepends 工具看下 dll 导出的函数对不对不就行了吗。。

回到顶部