Node.js 运行win32函数时出现电子/节点ffi错误

Node.js 运行win32函数时出现电子/节点ffi错误,node.js,typescript,winapi,ffi,node-ffi,Node.js,Typescript,Winapi,Ffi,Node Ffi,我正在尝试从electron 4(节点10.x)调用Win32函数,但我发现了一个对我来说不太清楚的错误 我正在使用以下代码: import * as ffi from 'ffi'; import * as Struct from 'ref-struct'; import * as ref from "ref"; const ABM_NEW = 0x0, ABM_REMOVE = 0x1, ABM_QUERYPOS = 0x2, ABM_SETPOS = 0x3

我正在尝试从electron 4(节点10.x)调用Win32函数,但我发现了一个对我来说不太清楚的错误

我正在使用以下代码:

import * as ffi from 'ffi';
import * as Struct from 'ref-struct';
import * as ref from "ref";

const
    ABM_NEW = 0x0,
    ABM_REMOVE = 0x1,
    ABM_QUERYPOS = 0x2,
    ABM_SETPOS = 0x3;

const RECT_Struct = new Struct({
   left: ref.types.long,
   top: ref.types.long,
   right: ref.types.long,
   bottom: ref.types.long
});

const APPBARDATA_Struct = new Struct({
    cbSize: ref.types.uint32,
    hWnd: ref.refType(ref.types.void),
    uCallbackMessage: ref.types.uint32,
    uEdge: ref.types.uint32,
    rc: ref.refType(RECT_Struct),
    lParam: ref.types.int64
});

export const shell32 = ffi.Library('shell32.dll', {
    SHAppBarMessage: [ 'pointer', [ 'int', 'pointer']]
});

export function registerAppBar(windowHandle: any) {
    let data = new APPBARDATA_Struct();
    data.cbSize = APPBARDATA_Struct.size;
    data.hWnd = windowHandle;
    data.uCallbackMessage = 1234;
    let res = shell32.SHAppBarMessage(ABM_NEW, data);
}
然后在电子背景下:

registerAppBar(mainWindow.getNativeWindowHandle());
我得到的错误是“TypeError:错误设置参数1-WritePoint:缓冲区实例应作为第三个参数”,我不知道为什么会发生这种情况

非常感谢您的任何帮助/想法



我要做的是注册一个electron窗口,使其成为一个应用程序工具栏,根据

需要传递给
SHAppBarMessage
的第二个参数是指向
APPBARDATA\u结构的指针,请参见以下链接:


此外,
APPBARDATA_Struct
中的
rc
不是structPtr。

需要传递到
SHAppBarMessage
的第二个参数是指向
APPBARDATA_Struct
的指针,请参见以下链接:

另外,
APPBARDATA\u Struct
中的
rc
不是structPtr。

使用我得到的结果是使用这个:

export const shell32 = ffi.Library('shell32.dll', {
    SHAppBarMessage: [ 'pointer', [ 'int', APPBARDATA_Struct]]
});
与Drake Wo评论中的建议类似,但没有“”且未使用ref.refType

现在,函数返回true:D

,使用以下命令,我得到了它:

export const shell32 = ffi.Library('shell32.dll', {
    SHAppBarMessage: [ 'pointer', [ 'int', APPBARDATA_Struct]]
});
与Drake Wo评论中的建议类似,但没有“”且未使用ref.refType


现在,函数返回true:D

,不幸的是,它无法100%工作。我现在没有收到错误,但是函数没有效果(返回false),很遗憾,它不能100%工作。我现在没有得到错误,但是函数没有效果(返回false)