我正在尝试让 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 样板)