私はnodejs-ffiモジュールでCの32ビットDLLを読み込もうとしているのですが、これは私のコードです:
実行中、ノードはDynanic_library.jsでエラーをスローします:74 Dynamic Linking Error
var ffi = require("ffi");
var ref = require("ref");
var path = require("path");
import idatabase = require("./IDatabase");
import idataset = require("./Dataset");
var dllpath = path.join(__dirname, "../../StoneBaseDLL.dll");
var dbpath = path.join(__dirname, "../../../database/metadata/metadata.db");
export class Stonebase implements idatabase.IDatabase
{
dbHandler;
dbConnection;
constructor() {
this.dbHandler = ffi.Library(dllpath, {
"connect": ["void*", ["string"]],
"Execute": ["void*", ["string", "void*"]],
"disconnect": ["void*", ["void*"]],
"EndOfResultSet": ["bool", ["void*"]],
"Next": ["void", ["void*"]],
"getNumberOfFields": ["int", ["void*"]],
"GetField_AsString": ["string", ["int", "void*"]],
"GetField_AsChar": ["string", ["int", "void*"]],
});
this.dbConnection = this.dbHandler.connect(dbpath);
}
execute(query: string) {
var data: Array<Array<string>>;
var columns: Array<string>;
data = [];
columns = [];
var i = 0;
var dset = this.dbHandler.Execute(query, this.dbConnection);
for (var j = 0; j < this.dbHandler.getNumberOfFields(dset); j++) {
columns[j] = "column" + j;
}
while (!this.dbHandler.EndOfResultSet(dset)) {
var line: Array<string>;
line = [];
for (var j = 0; j < this.dbHandler.getNumberOfFields(dset); j++) {
line[j] = (<string>this.dbHandler.GetField_AsChar(j, dset));
}
data[i] = line;
this.dbHandler.Next(dset);
i++;
}
return new idataset.Dataset(data, columns);
}
}
私はTypescriptを使っていますが、これは問題とは何の関係もないと確信しています
助けてくれてありがとう!
回答:
回答№1は0あなたのノードが32ビットであることを確認しましたか?ノードが64ビットの場合は、32に切り替えてもう一度お試しください。