Electron调用dll

Electron通过ffi调用dll(我这里以调用32位dll为例子,如果调用64为dll,更改编译环境即可)

  1. 编译
npm install ffi
cd .\node_modules\ffi
node-gyp rebuild --target=4.0.0 --arch=ia32 --target_arch=ia32 --msvs_version=2015

以同样的方式编译ref

target=4.0.0 --4.0.0是Electron的版本

  1. 使用

初始化

	const ffi = require('ffi')
	const ref = require('ref')
	const stringPointer = ref.refType(ref.types.CString)

声明dll方法

      let dllObj = ffi.Library(__dirname + '/dllProject.dll', {
        'add': ['int', ['int', 'int']],
        'stringtest': ['int', [stringPointer, 'int *']],
        'callJsFun': ['void', []],
        'setcallback': ['void', ['pointer']]
      })
      // 设置回调函数 可以直接在dll中调用js方法
      let callback = ffi.Callback('void', ['string'], function (str) {
        alert(str)
      })
      dllObj.setcallback(callback)

调用dll方法

        let results = dllObj.add(1, 2)
        alert(results)

传递指针

        let stringData = ref.alloc('string')
        let stringLen = ref.alloc('int')
        let results = dllObj.stringtest(stringData, stringLen)
        stringData = ref.readPointer(stringData, 0, ref.deref(stringLen))
        alert(results + ': ' + stringData.toString())

GitHub地址

你可能感兴趣的:(Electron)