2016-03-20 9 views
1

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

しかし、私は

Message: Error: struct field descriptors must contain one property

エラーが出るの更新2.たぶん、最初の試みは動作しますか?

答えて

0

WinAPI、COM、Objective-C、GTK、XCB、X11などのこれらのシンクロナスブロッキングAPIへのソリューションは、オーバーラップした構造体と完了ルーチンを取得する前に、作品を使用することです。

GTKとObjCとX11のいくつかのコールバックがメインスレッド上になければならないことに注意してください。そして、修正不可能なバグのためにワーカーからmainthreadにコールバックをセットアップするのにdispatch_queueを使用することはできません。

Windowsは、汗をかいた労働者と一緒に楽しく満員です。

私は個人的にPromiseWorkersを愛する - https://developer.mozilla.org/en-US/docs/Web/API/PromiseWorker - 私はので、私は

+1

(あなたは私が私のアドオンからPromiseWorkerボイラープレートのコピーをお勧めしませんので、これを必要としない場合があります)PromiseWorkerからmainthreadから関数を呼び出すことができ、それをハッキングhttps://developer.mozilla.org/en-US/docs/Web/API/ChromeWorkerでこのメモが心配です。この機能は標準ではなく、標準化されていません。ウェブに直面している制作サイトでは使用しないでください。実装間に大きな非互換性があり、今後この動作が変わる可能性があります。 – tofutim

+1

ChromeWorkerを使用すると、アドオンが承認されますか? – tofutim

+0

@tofutim、その警告はWeb開発者向けです。 ChromeWorkerはアドオンに強く推奨されています。これは、すべてのスレッドをメインスレッドから外すためです。将来的にはすべてがChromeWorkerからのものになります。これが計画です。まあ、彼らは、彼らは私がChromeWorkerだと思うメインスレッドからすべてを望んでいると言いました。 – Noitidart

関連する問題