node-webkit 在 c++ 插件中创建 ArrayBuffer 时崩溃
node-webkit crashes when I create an ArrayBuffer inside c++ add-on
我正在编写一个node-webkit c++插件,每次我尝试创建ArrayBuffer时它都会崩溃。以下代码是一个最小崩溃示例。
#include <node.h>
#include <v8.h>
#include <cstring>
using namespace v8;
Handle<Value> createVector(const Arguments& args) {
HandleScope scope;
Handle<ArrayBuffer> a = ArrayBuffer::New(12);
return scope.Close(a);
}
void init(Handle<Object> exports) {
exports->Set(String::NewSymbol("createVector"),
FunctionTemplate::New(createVector)->GetFunction());
}
NODE_MODULE(vectortest, init)
每次我调用createVector()方法时,node-webkit在Windows 8上都会崩溃。我使用以下 JavaScript 代码从控制台调用它:
var m=require('vectortest');
m.createVector();
我在node-webkit 0.7.2和0.7.5上尝试过。有什么建议吗?
所以我使用下面的解决方法解决了我的问题。
Handle<Object> createBuffer(void *data, size_t size) {
if (size == 0)
throw "Zero sized data";
Handle<Value> abv = Context::GetCurrent()->Global()->Get(String::NewSymbol("ArrayBuffer"));
Handle<Value> argv[] = { Integer::NewFromUnsigned(size) };
Handle<Object> arrbuf = Handle<Function>::Cast(abv)->NewInstance(1, argv);
void *buffer = arrbuf->GetPointerFromInternalField(0);
memcpy(buffer, data, size);
Handle<Value> ui8av = Context::GetCurrent()->Global()->Get(String::NewSymbol("Uint8Array"));
argv[0] = arrbuf;
Handle<Object> result = Handle<Function>::Cast(ui8av)->NewInstance(1, argv);
return result;
}
显然在 v8 命名空间中。
似乎node,因此node-webkit,在node/src/v8_typed_array.cc中重新实现了ArrayBuffer,TypedArray,Uint8Array等。它们与 v8.h 中的完全不同,并且没有要包含的头文件。
最初,我的javascript代码中有这样的东西:
var buffer = ... // call function that in the end call createBuffer
var data = new Uint8Array(buffer);
并且createBuffer返回arrbuf ArrayBuffer,但我在这样做时遇到了问题:数据长度始终为0。相反,通过在 c++ 代码中创建 Uint8Array,行为是正确的,我不知道为什么。
相关文章:
- 当回溯以零开始时,如何调试崩溃
- 内联映射初始化的动态atexit析构函数崩溃
- 执行函数时导致崩溃的变量
- 程序崩溃并显示"std::out_of_range"错误
- CoInitialize()在单独的线程上崩溃而不返回
- 使用调试/崩溃报告将应用程序部署到客户端
- 为什么所有C++编译器都会崩溃或挂起此代码
- 为什么lambda在clang上崩溃而不是在gcc上崩溃
- 为什么我的多线程作业队列崩溃
- ExtractIconEx:可以工作,但偶尔会崩溃
- 为什么引用传递会导致此崩溃(C++)
- 试图创建流或fopen时程序崩溃
- 类对象数组的问题会导致崩溃
- 排序时无法执行交换操作.我做的时候它会崩溃.为什么
- 为什么要增加导致崩溃的指针
- 在虚幻引擎中删除NXOpen对象时崩溃
- 为什么它只打印双链接列表的第一个值,而我的程序却崩溃了
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- Visual Studio在尝试读取resource.txt文件时崩溃
- node-webkit 在 c++ 插件中创建 ArrayBuffer 时崩溃