Я пытаюсь пройти byte[]
данные из Kotlin в C ++ для передачи в JavaScript через V8 ArrayBuffer.
В Котлине:
val buffer = buffer.backingStore.asFloatBuffer()
val byteBuffer = ByteBuffer.allocate(buffer.capacity() * 4)
byteBuffer.asFloatBuffer().put(buffer)
Вышеуказанное работает как положено и печатается правильно. Массив [1.1, 2.2, 3.3]
,
Так byteBuffer.array()
передается через JNI в C ++, принимается как jbyteArray
, Здесь вещи становятся странными.
В C ++ я пытаюсь преобразовать его в char
и передать его в ссылку на функцию JavaScript:
char* buffer = (char*) env->GetByteArrayElements(jbuffer, 0);
Local<ArrayBuffer> arrayBuffer = v8::ArrayBuffer::New(isolate_, length);
memcpy(arrayBuffer->GetContents().Data(), buffer, length);
Local<Value> argv[] = {
arrayBuffer
};
v8::Local<v8::Context> ctx = hce->context_.Get(hce->isolate_);
v8::Function *fn = *(_bufferFn->Get(isolate_));
В JavaScript я получаю ArrayBuffer с правильной длиной, но когда я инициализирую Float32Array
от этого я получаю [-428967904, -427919360, 4.175240064796526e-8]
,
Я глубоко в кроличьей норе, над моей головой!
Задача ещё не решена.
Других решений пока нет …