Передача плоских буфера от C до Duktape Javascript - PullRequest
0 голосов
/ 19 января 2019

Интересно, если кто-то там добился какого-либо успеха или попытался объединить плоские буферы с duktape, пока я могу получить только примерно половину пути ...

Я могу вытолкнуть плоский буфер из C, иПолучите доступ к нему из JS с помощью следующего кода, и он, кажется, отлично работает:

duk_push_heapptr(ctx, t->ptr);
duk_push_external_buffer(ctx);
duk_config_buffer(ctx, -1, d.data, d.length);
duk_call(ctx, 1);

Однако, я не могу достичь того же успеха, передавая flatbuffer из JS в C (или C ++ в моем случае):

void * buff;
duk_size_t sz;
buff = duk_require_buffer_data(ctx, 1, &sz);
if (VerifyLogEventBuffer(flatbuffers::Verifier((uint8_t *)buff, (unsigned int)sz))) {
    std::cout << "Buffer is good here!" << std::endl;
} else {
std::cout << "Buffer is broken here even" << std::endl;
}

Есть идеи, что я могу здесь делать неправильно?Нет проблем с компиляцией, но планшет не читается.

Редактировать: Я должен также включить соответствующие JS -

        var fbb = new flatbuffers.Builder(1024);

    PGS.Buffers.LogEvent.startLogEvent(fbb);
    PGS.Buffers.LogEvent.addLevel(fbb,'WARN');
    PGS.Buffers.LogEvent.addSource(fbb,"js");
    PGS.Buffers.LogEvent.addText(fbb,"1 Event Emitted from JS now with a very long text string to make sure our buffer size increases.");
    var toEmit = PGS.Buffers.LogEvent.endLogEvent(fbb);
    PGS.Buffers.LogEvent.finishLogEventBuffer(fbb, toEmit);

   // var b = new Buffer(fbb.asUint8Array());
    print("1 Attempting to raise long log event using dataBuffer and Buffer");
    raise('log', new Buffer(fbb.asUint8Array()));
...