如何将重叠结构转换为 js-ctypes



我正在尝试让 ReadFileEx 在 js-ctypes 中工作,并在将 OVERLAPPED 结构转换为 js-ctypes 时遇到了一些障碍。任何关于翻译的提示将不胜感激:

typedef struct _OVERLAPPED {
  ULONG_PTR Internal;
  ULONG_PTR InternalHigh;
  union {
    struct {
      DWORD Offset;
      DWORD OffsetHigh;
    };
    PVOID  Pointer;
  };
  HANDLE    hEvent;
} OVERLAPPED, *LPOVERLAPPED;

这是不对的,但我从

const struct_overlapped = new ctypes.StructType("overlapped",
  [ {"Internal": ctypes.uint64_t.ptr},
    {"InternalHigh": ctypes.uint64_t.ptr},
    [ [ {"Offset": ctypes.uint32_t},
        {"OffsetHigh": ctypes.uint32_t} ],
      {"Pointer": ctypes.voidptr_t} ],
    {"hEvent": ctypes.voidptr_t} ]);

但我不确定如何处理"联合"和第二个结构。

更新。也许是这样的?

const struct_offset = new ctypes.StructType("offsetStruct",
  [ {"Offset": ctypes.uint32_t},
    {"OffsetHigh": ctypes.uint32_t} ]);
const struct_overlapped = new ctypes.StructType("overlapped",
  [ {"Internal": ctypes.uint64_t.ptr},
    {"InternalHigh": ctypes.uint64_t.ptr},
    [ {"offsetStruct": ctypes.struct_offset},
      {"Pointer": ctypes.voidptr_t} ],
    {"hEvent": ctypes.voidptr_t} ]);

但是我收到一个错误

消息:错误:结构字段描述符必须包含一个属性

更新 2.也许第一次尝试会奏效?

在进入重叠的结构和完成例程之前,这些同步阻塞 API 的解决方案,如 WinAPI、COM、Objective-C、GTK、XCB、X11 等,就是使用作品。

请注意,GTK 和 ObjC 和 X11 中的一些回调必须在主线程上。并且由于无法修复的错误,无法使用dispatch_queue在主线程上设置来自工人的回调。

窗户充满了乐趣,工人没有汗水。

我个人喜欢 PromiseWorkers——https://developer.mozilla.org/en-US/docs/Web/API/PromiseWorker——我破解了它,这样我就可以从 PromiseWorker 的主线程调用函数(你可能不需要这个,所以我不建议从我的插件中复制 PromiseWorker 样板)

最新更新