Notes
  • 速记
  • 前端面试
  • HTML / CSS
    • HTML
    • CSS
    • CSS Modules
      • CSS Modules
        • CSS Modules Usage
      • Stylus
      • Nunjucks
  • Javascript
    • 正则表达式
    • 代理(Proxy)和反射(Reflection)
    • 类型转换
    • 按位操作
    • 数据可视化
    • 数据采集
      • 无(全)埋点
      • 模块曝光事件
    • package
      • axios
    • Event Loop
    • React
      • React热身
      • VDOM和DOM-diff
    • Vue
    • Omi
    • MVVM
    • 百度小程序
    • AST抽象语法树
    • ServiceWorker
    • WebSocket
  • NodeJS
    • Assert 断言
    • chai.js 断言库
    • Node Global Obj And Var
    • CLI Writed By Nodejs
    • Framework
      • Hapi Js Framework
    • Electrode JS
      • Electrode Platform
      • Electrode Question
    • Redux
      • Redux Basic Usage
      • Middleware And Asynchronous
      • React-Redux 的用法
    • NPM
      • package.json
      • semver
    • Webpack
      • 编写插件
    • 同构渲染
    • 调用DLL
  • 服务端
    • Inotify
    • Linux
    • Nginx
      • Nginx简介
      • Nginx原理、安装预配置
    • TCP/IP 协议
    • HTTP 协议
      • 基础概念篇
      • 协议详解篇
    • Process
      • 阻塞与非阻塞
      • 进程与线程优性能
  • 数据库
    • GraphQL
  • 移动端
  • 微信小程序
    • 微信小程序安装(linux)
    • 小程序第三方框架
  • 开发工具
    • 开发工具安装
    • Vim Command Collection
    • Git
      • Git Rule
      • Git Submodule
      • gitignore
    • Lerna
    • Ubuntu开发环境安装
  • 运维测试
    • Docker
      • Docker Synopsis
      • docker.sock
    • Nightwatch
    • Jest
  • 算法/数学/架构
    • 设计模式
    • 架构设计经验分享
    • 前端架构
    • 基本数据结构
    • 函数式编程
  • 软件工程
    • 软件生命周期
Powered by GitBook
On this page
  • dll介绍
  • 调用方式
  • 使用 ffi 的方式

Was this helpful?

  1. NodeJS

调用DLL

dll介绍

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

调用方式

  1. 使用 ffi 模块调用 (提示:github仓库近2年没有维护动态)

  2. 使用 addon ,用 LoadLibrary 加载 dll

使用 ffi 的方式

var ffi = require('ffi');
var ref = require('ref');
var refStruct = require('ref-struct');
var refArray  = require('ref-array');

// 定义结构体
var configClass = refStruct({
    param1:ref.types.int,
    param2:ref.types.int
});

var strClass = refStruct({
    arr:refArray(ref.types.char, 100),
});

// 映射 dll 中的方法
var DLL = ffi.Library('testdll.dll',{
    'doStrings':['string',[ref.refType(strClass)]],
    'doString':['string',[ref.refType(strsClass)]],
    'doResult':['int',[ref.refType(resClass)]],
    'doTest':['int',[ref.refType(configClass)]],
    'doParam':['int',[ref.refType(paramClass)]],
    'doStruct':['string',[ref.refType(ref.refType(ref.types.void)), ref.refType(structClass)]]
});

// 引用
var config = new configClass();
config.param1 = 3;
config.param2 = 5;

var res = DLL.doTest(config.ref());
Previous同构渲染Next服务端

Last updated 5 years ago

Was this helpful?