Передача плоских буфера от C до Duktape Javascript
Хотите знать, если кто-то там имел какой-либо успех или пытался интегрировать flatbuffers с duktape, пока я могу получить только около половины пути...
Я могу выдвинуть flatbuffer из 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()));