前端(node.js)调用dll动态链接库

Ⅰ- 壹 - 需求

使用 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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Node.js可以使用`ffi`模块调用设备驱动的dll动态库。`ffi`模块 stands for `Foreign Function Interface`(外部函数接口),它允许Node.js应用程序直接调用动态链接库中的C/C++函数。 使用`ffi`模块调用设备驱动的dll动态库,首先需要安装`ffi`模块。可以使用npm(Node.js的包管理器)通过以下命令进行安装: ```shell npm install ffi ``` 安装完成后,可以在Node.js应用程序中使用`ffi`模块调用设备驱动的dll动态库。首先需要引入`ffi`模块: ```javascript const ffi = require('ffi'); ``` 然后,使用`ffi.Library`方法加载dll动态库,并定义要调用的函数: ```javascript const libraryPath = 'path/to/your/device/driver.dll'; const myLibrary = ffi.Library(libraryPath, { 'functionName1': ['returnType1', ['parameterType1', 'parameterType2']], 'functionName2': ['returnType2', ['parameterType3', 'parameterType4']] }); ``` 在上述代码中,`functionName1`和`functionName2`是设备驱动DLL中的函数名,`returnType1`和`returnType2`是函数的返回值类型,`parameterType1`、`parameterType2`、`parameterType3`和`parameterType4`是参数的类型。 接下来,可以通过调用`myLibrary`对象的方法来调用设备驱动DLL中的函数: ```javascript myLibrary.functionName1(parameter1, parameter2); ``` 其中,`parameter1`和`parameter2`是要传递给设备驱动DLL函数的参数。 通过以上步骤,就可以在Node.js应用程序中调用设备驱动的dll动态库了。当然,在调用之前,需要确保设备驱动dll动态库的路径正确,以及设备驱动dll动态库中的函数名、参数类型和返回值类型的定义正确。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值