Ⅰ- 壹 - 需求
使用 js node 调用dll 动态链接库.
github地址如下,包含dll,里面就一个Add方法暴露出来
github
Ⅱ - 贰 - 两种方式调用dll
当前开发环境
Windows 11 22H2
node v16.20.0
Python 3.11.2
一 node直接调用
需要安装这俩库
ffi-napi
npm i ffi-napi
npm i -g node-gyp
app.js
var ffi = require('ffi-napi');
var libm = ffi.Library('./add.dll', {
'Add': [
'int', // 对应 C函数返回类型
['int', 'int'] // C函数参数列表
],
});
console.log(libm.Add(6, 5)); // 2
二 node调python调dll
第一种不好使,曲线救国的方式这个是。
python-shell
npm install python-shell
app.js
var { PythonShell } = require('python-shell');
// mode 类型: json text binary(默认)
var pyshell = new PythonShell('index.py', { mode: 'text' });
//js传送给python的数据
pyshell.send(JSON.stringify({ a: 9, b: 4 }));
//在实施python代码之后,将数据从python传递给js。
//传递给python的数据存储在“data”中。
pyshell.on('message', function (data) {
console.log(data);
});
python
import json
import sys
from ctypes import cdll
# 导入 dll 该文件 有一个 Add方法 累加的
DLLFUN = cdll.LoadLibrary("./add.dll")
data = sys.stdin.readline() # 从js 传过来 获取数据
jsonData = json.loads(data) # 转换为字典 js中的对象
dlladdRes=DLLFUN.Add(jsonData['a'],jsonData['b'])
print(dlladdRes)
# num=int(data) # 数据转换为 int
# def sum(a):
# return a+3
# print(type(data))
# print(getattr(data,'a'))
# print(DLLFUN.Add(1,2))
# print(sum(num)) #print()的内容交付给js
# 读取 json文件中 的数据 发送给js 接收
# import sys
# import json
# # (3-1)打开JSON文件test.json
# f = open("./pyjson.json", "r")
# # (3-2)读取test.json的数据
# json_dict = json.load(f)
# # (3-3)JSON数据json_dict的key:'stoch_访问num’。
# dat1 = json_dict["stock_num"]
# print(dat1) # 将打印内容返回给python-shell