请求使用 FFI-NAPI 调用 Dll 库时发现的问题的答案

发布于 2025-01-14 09:06:36 字数 2181 浏览 5 评论 0原文

我很困惑。 使用 FFI-NAPI - Dll 时。 返回值不接收任何东西。 而是在终端打印出内容(stdut)。 我将在下面发布部分代码并继续尝试。我想使用 FF 回调后它会起作用,但我不确定。你能帮我看一下吗?

这是我的代码:


import {  myDll } from './utils/DllImport'
....
....
ipcMain.on('GetAdbProp', () => {
  var nameBuffer = Buffer.alloc(10240);
  nameBuffer.fill(0);
  nameBuffer.write('', 0, "ascii");
  const res=myDll.GetAdbProp('factory.board', nameBuffer)
  console.log(res,nameBuffer)
})
const ffi = require('ffi-napi')
const ref=require('ref-napi')
let path = require('path')
let dllFilePath;

if (process.env.NODE_ENV === 'development') {
   dllFilePath = path.join(process.cwd(), './resources/extraResources','AdbHandler.dll')
} else {
    dllFilePath = path.join(process.cwd(), './resources/extraResources','AdbHandler.dll')
}
let myDll =ffi.Library(dllFilePath, {
    'GetAdbProp':
        [
            ref.types.bool, ['string','char *'],
        ],
})
module.exports = {
    myDll
}

打印结果:

\platform-tools\adb.exe  shell "getprop | grep factory.board"
[factory.board.acclsensor]: [1]
[factory.board.brightness]: [0]
[factory.board.bt]: [1]
[factory.board.charge]: [-1]
[factory.board.cmd]: [0][factory.board.gyrosensor]: [1]
[factory.board.headphone]: [0]
[factory.board.info_check]: [0]
[factory.board.key]: [0]
[factory.board.lcd]: [0]
[factory.board.led]: [0]
[factory.board.mic_hp]: [0]
[factory.board.mic_mic]: [0]
[factory.board.otg]: [0]
[factory.board.psensor]: [0]
[factory.board.sdcard]: [-1]
[factory.board.spk]: [0]
[factory.board.wifi]: [1]
res,nameBuffer
true <Buffer@0x000062140074A800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 10190 more bytes>
>

 const res=myDll.GetAdbProp('factory.board', nameBuffer)

这串代码返回一个空值,并且缓冲区没有改变,但是我的终端有一些东西,
我该如何使用这个打印输出(stduit内容),以下这些。

\platform-tools\adb.exe  shell "getprop | grep factory.board"
[factory.board.acclsensor]: [1]
[factory.board.brightness]: [0]
[factory.board.bt]: [1]
[factory.board.charge]: [-1]
.....
....
.....

谢谢

I am confused。
When using FFI-NAPI - Dll 。
The return value does not receive anything。
But print out the content (stdut) at the terminal。
I will post part of the code below and keep trying. I guess it will work after using FF-callback, but I'm not sure. Could you please take a look at it for me 。

Here is my code:


import {  myDll } from './utils/DllImport'
....
....
ipcMain.on('GetAdbProp', () => {
  var nameBuffer = Buffer.alloc(10240);
  nameBuffer.fill(0);
  nameBuffer.write('', 0, "ascii");
  const res=myDll.GetAdbProp('factory.board', nameBuffer)
  console.log(res,nameBuffer)
})
const ffi = require('ffi-napi')
const ref=require('ref-napi')
let path = require('path')
let dllFilePath;

if (process.env.NODE_ENV === 'development') {
   dllFilePath = path.join(process.cwd(), './resources/extraResources','AdbHandler.dll')
} else {
    dllFilePath = path.join(process.cwd(), './resources/extraResources','AdbHandler.dll')
}
let myDll =ffi.Library(dllFilePath, {
    'GetAdbProp':
        [
            ref.types.bool, ['string','char *'],
        ],
})
module.exports = {
    myDll
}

Print the result :

\platform-tools\adb.exe  shell "getprop | grep factory.board"
[factory.board.acclsensor]: [1]
[factory.board.brightness]: [0]
[factory.board.bt]: [1]
[factory.board.charge]: [-1]
[factory.board.cmd]: [0][factory.board.gyrosensor]: [1]
[factory.board.headphone]: [0]
[factory.board.info_check]: [0]
[factory.board.key]: [0]
[factory.board.lcd]: [0]
[factory.board.led]: [0]
[factory.board.mic_hp]: [0]
[factory.board.mic_mic]: [0]
[factory.board.otg]: [0]
[factory.board.psensor]: [0]
[factory.board.sdcard]: [-1]
[factory.board.spk]: [0]
[factory.board.wifi]: [1]
res,nameBuffer
true <Buffer@0x000062140074A800 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... 10190 more bytes>
>

 const res=myDll.GetAdbProp('factory.board', nameBuffer)

This string of code returns an empty value, and the buffer hasn't changed, but my terminal has something,
How can I use this printout(stduit content),The following these。

\platform-tools\adb.exe  shell "getprop | grep factory.board"
[factory.board.acclsensor]: [1]
[factory.board.brightness]: [0]
[factory.board.bt]: [1]
[factory.board.charge]: [-1]
.....
....
.....

thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文