2016-03-20 7 views
1

Ich versuche, ReadFileEx in js-Ctypes arbeiten und lief in ein kleines Hindernis bei der Umwandlung der OVERLAPPED-Struktur in js-Ctypes. Irgendwelche Tipps auf der Übersetzung würden sehr geschätzt werden:Wie konvertiere ich OVERLAPPED-Struktur in js-Ctypes?

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

Das ist nicht richtig, aber ich begann mit

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} ]); 

aber ich bin nicht sicher, wie die „Vereinigung“ zu handhaben und die zweite Struktur .

Aktualisierung. Vielleicht so etwas?

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} ]); 

Aber ich bekomme ein Fehler

Message: Error: struct field descriptors must contain one property

Update 2. Vielleicht funktioniert der erste Versuch?

Antwort

0

Vor dem Eingreifen in überlappende Strukturen und Vervollständigungsroutinen, ist die Lösung für diese synchronen blockierenden APIs wie WinAPI, COM, Objective-C, GTK, XCB, X11 usw. usw. zu verwenden.

Beachten Sie, dass einige Rückrufe in GTK und ObjC und X11 auf dem Hauptthread sein müssen. Und es ist nicht möglich, dispatch_queue zu verwenden, um den Callback auf dem Mainthread von Arbeitern aufgrund eines nicht fixierbaren Fehlers einzurichten.

Windows ist voller Spaß mit den Arbeitern kein Schweiß.

Ich persönlich lieb PromiseWorkers - https://developer.mozilla.org/en-US/docs/Web/API/PromiseWorker - ich habe es gehackt, so kann ich von den PromiseWorker Funktionen aus dem Mainthread nennen (man könnte das nicht brauchen, so würde ich empfehlen, nicht das PromiseWorker Kopieren Kesselblech aus meiner Addons)

+1

Besorgt über diese Notiz auf https://developer.mozilla.org/en-US/docs/Web/API/ChromeWorker - Diese Funktion ist nicht standardisiert und befindet sich nicht auf einem Standard-Track. Verwenden Sie es nicht auf Websites, die mit dem Internet verbunden sind: Es funktioniert nicht für jeden Benutzer. Es kann auch zu großen Inkompatibilitäten zwischen den Implementierungen kommen und das Verhalten kann sich in Zukunft ändern. – tofutim

+1

Kann ich mit ChromeWorker mein Add-on genehmigen? – tofutim

+0

@tofutim, diese Warnung ist für Webentwickler gedacht. ChromeWorker werden für Addons dringend empfohlen, da sie alles aus dem Hauptthread entfernen. In Zukunft wird alles von einem ChromeWorker sein, das ist der Plan. Nun, sie sagten, dass sie alles vom Hauptfaden wollen, was ich für einen ChromeWorker halte. – Noitidart