Node – Dll

Node调用DLL

1、DLL介绍

DLL(Dynamic Link Library)文件为动态链接库文件,又称"应用程序拓展",是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。

2、Node 怎么调用DLL

使用 node-ffi 模块,非常灵活的node中去调用dll中暴露的方法。

3、安装node-ffi模块

Node-gyp https://github.com/nodejs/node-gyp

Node-ffi https://github.com/node-ffi/node-ffi

在安装node-ffi模块前,必须保证node-gyp 安装成功,并且node-gyp可以使用。

安装命令 npm install ffi

4、安装node-ffi 遇到的坑

如果安装成功了,就看看我是怎么解决这个坑的吧。

不知道是怎么回事,每次安装ffi模块,都会导致 node-gyp build V8类型出错。

解决方法:

直接克隆node-ffi仓库到本地,把node-ffi 放到全局的 node-modules中。

git clone git://github.com/node-ffi/node-ffi.git

在到CMD命令窗口中,执行 npm install node-ffi –g,即可成功安装。

安装完后,全局的 node-modules中会出现 快捷方式的 ffi文件夹。

需要创建一个ffi文件夹,并把快捷方式的 ffi文件夹内容剪切到 新的 ffi文件夹中,也就是去掉快捷方式即可。

5、开发DLL

开发DLL工具,我使用的是VS2015。

步骤:

开发DLL工具,我使用的是VS2015。

打开VS2015->文件->新建->项目 选择Win32控制台应用程序

选择下一步

选择 控制台应用程序 空项目 最后点击 完成

右击nodeFile项目名称,选择添加->新建项

选择头文件,名称我写的 fileChange.h 点击添加

同理,相同的步骤创建C++文件(.cpp),名称fileChange.cpp 点击添加

在源文件 fileChange.cpp 中编写代码:

#include “fileChange.h”

//同步函数,求和方法

int add(int i, int j) {

return i + j;

}

//异步函数,求和方法

int addSync(int i, int j, void (*callfuct)(int a, int b)) {

int sum = i + j;

callfuct(sum, j);

return 0;

}

在头文件 fileChange.h 中编写代码:

#pragma once

extern “C” __declspec(dllexport) int add(int i, int j);

extern “C” __declspec(dllexport) int addSync(int i, int j, void (*callfuct)(int a, int b));

在这里必须使用,extern “C”到此,让编译器使用C解析方法去导出DLL,不然node-ffi模块识别不了。

**6、生成DLL **

因为我的电脑环境是64位,node也是64位,所以我导出的dll也需要是64位,不然node-ffi也是调用不成功。

导出方法:

导出的dll文件在在项目目录下的 \x64\Debug 中,即可找到 nodeFile.dll动态链接库文件。

7、node使用DLL

//导入ffi模块

var ffi = require(‘ffi’);

//使用ffi.Library加载dll, 第一个参赛是库文件路径,第二个参数是JSON格式,用于定义使用的dll方法。

//int 表示整形,pointer 表示 指针地址,也可以使用 int * 表示。

var libm = ffi.Library(’./…/dll/nodeFlie’, {

‘add’: [ ‘int’, [ ‘int’,‘int’ ] ],

‘addSync’: [‘int’, [‘int’,‘int’,‘pointer’]]

});

//调用方法

const sum = libm.add(1,5);

console.log(sum);

//定义 回调函数

let addCallback = ffi.Callback(‘void’, [‘int’, ‘int’], (a, b) => {

console.log(a,b);

});

//执行回调的 dll方法

libm.addSync(2,3,addCallback);

执行结果:

PS E:\nodejsproject\node-fileChangeAttr\src> node .\index.js

6

5 3

html css js调用dll,node调用dll 方法,及详细步骤相关推荐

  1. html引入css js,html中如何调用css和js?

    html中如何调用css和js?下面本篇文章就来给大家介绍一下在html中调用css和js的方法.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 在HTML中调用css的方法 行内样 ...

  2. js中的数组对象排序(方法sort()详细介绍)

    定义和用法 sort() 方法用于对数组的元素进行排序. 语法    arrayObject.sort(sortby) 参数sortby:可选.规定排序顺序.必须是函数. 返回值 对数组的引用.请注意 ...

  3. JS中将 JSON 数据转换为 Excel 表格的详细步骤如下:

    工作中 后端 那为兄弟 用java把execl的数据转为json格式发我了,他问我能不能用js把josn在转为execl格式 然后 我就开始了 项目地址 下载 xlsx 库 在使用 xlsx 库之前, ...

  4. CSS项目基础实战:实现小米官网+详细步骤分析+出错问题总结

    1.有关项目的基本结构:|--html 文件与 CSS 文件单独设置分开.|--在html中引入:|--重置样式表|--网页基本样式表:所有网页所共有使用的部分:网页宽度.网页字体.颜色.设置最小宽度 ...

  5. node.js调用Delphi写的Dll

    一.调用代码 Delphi版本Delphi 10 Seattle Delphi代码 unit Unit1;interfacefunction testint(i: Integer): Integer; ...

  6. labview对dll的调用

    LabVIEW调用DLL文件 LabVIEW支持通过调用DLL文件的方式与其它编程语言混合使用.比如,在实际的工程项目中,用户可以用C++语言实现软件的运算部分,并把这些功能构建在DLL文件中,然后再 ...

  7. windows RT开发笔记:WinRT DLL及其调用研究

    一. 几个概念: WinRT : Windows Runtime, windows运行时.创建Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验.WinRT会 ...

  8. wasm转c调用与封装至dll案例

    wasm转c调用与封装至dll案例 准备工作 初级 猿人学练习题 中级 崔大网习题 高级 某视频网站 准备工作 相关文档: 1.某德地图矢量瓦片逆向(快速wasm逆向),执行wasm2c翻译出来的c代 ...

  9. Newtonsoft.Json.dll 本地调用正常,服务器调用不正常

    Newtonsoft.Json.dll 本地调用正常,服务器调用不正常的问题 请将System.Runtime.Serialization.dll 传到服务器项目bin文件夹中即可 转载于:https ...

最新文章

  1. Oracle 物理结构(六) 文件-数据文件
  2. linux C语言 socket编程教程(附两个例子)(socket教程)
  3. 【数据竞赛】一文看懂CCF BDCI 2020赛题任务与解析
  4. python搭建selenium_了解搭建selenium安装以及配置环境
  5. 动态加载html 添加样式表,使页面动态加载不同CSS样式表,从而实现不同风格模板的方法...
  6. js 给json添加新的字段,或者添加一组数据,在JS数组指定位置删除、插入、替换元素...
  7. NeurlPS2021 | 视觉语言导航的课程学习
  8. Ubuntu18.04 修改IP地址、查看网关、防火墙
  9. android阿里图标库,Android Stdio调用阿里图标库
  10. 单片机c语言 一小时,1小时单片机C语言入门..doc
  11. 【单片机学习笔记】(25):PID初识、门电路符号、H桥驱动电路、中断服务函数使用注意事项、SIM800C打电话发短信、OLED
  12. Install Anjuta
  13. 宇宙生命进化的八大密度
  14. 虎牙被抬员工当事人已收到开庭通知
  15. 那些看过一次后,就令人心里一动的美好词汇
  16. 三维重建中经常遇到的拓扑学概念的通俗解释
  17. Python笔记之通过PyWin32模块实现在QQ聊天窗口自动发送消息
  18. ubuntu中用vscode编译调试C\C++
  19. double型数据与float型数据在内存中的存储
  20. N4 新标日初级下 问法总结和课后练习题12答案

热门文章

  1. CentOS7快速搭建DNS中转服务器
  2. 联邦学习与神经协同过滤模型的结合
  3. 大旺中学2021年高考成绩查询,肇庆中学排名前十名,2021年肇庆中学排名一览表
  4. [HDU6960]Necklace of Beads
  5. 虚拟试穿--测试上衣代码详解
  6. 终于有人把云计算、大数据和 AI 讲明白了【深度好文】
  7. 轻轻松松搞定分布式Token校验
  8. DCB学习之三(CN)
  9. MIX 10 Session下载
  10. 大数据分布式计算开源框架Hadoop的介绍和运用