节点C++插件 - 当类型数组(Float32Array)作为参数传递时,如何访问它?
Node C++ Addon - How do I access a Typed Array (Float32Array) when it's been passed as an argument?
我想使用V8 Float32Array数据结构。我如何初始化它?
我还对直接访问数据的内存感兴趣。这怎么可能呢?
更新
现在最好的方法是使用辅助对象Nan::TypedArrayContents
。
assert(args[i]->IsFloat32Array());
Local<Float32Array> myarr = args[i].As<Float32Array>();
Nan::TypedArrayContents<float> dest(myarr);
// Now use dest, e.g. (*dest)[0]
在节点画布中有一个很好的例子。
原始答案,它显示了为什么助手是有用的
v8 API现在变化很快,所以这取决于你的node/io.js版本。要访问作为参数提供的数组中的数据,这应该适用于node0.12到io.js<3.0:
assert(args[i]->IsFloat32Array()); // These type-check methods are available.
Local<Float32Array> myarr = args[i].As<Float32Array>();
void* dataPtr = myarr->GetIndexedPropertiesExternalArrayData();
在io.js>=3.0(v8 4.3)中,您应该使用ArrayBuffer::GetContents
。(我还没有用过,3.0发布后会更新。)文档在这里。
在节点0.10中,TypedArray是自制的。这是一种方法:
Local<Object> buffer = args[i]->Get(NanNew("buffer"))->ToObject();
void* dataPtr = buffer->GetPointerFromInternalField(0);
构造类型化数组可以使用:
Float32Array::New(ArrayBuffer::New(Isolate::GetCurrent(), size * 4), 0, size);
相关文章:
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 用于访问容器<T>数据成员的正确 API
- 访问者访问变体并返回不同类型时出错
- 尝试通过多个向量访问变量时,向量下标超出范围
- 无法访问嵌套类.类的使用无效
- 写入位置0x0000000C时发生访问冲突
- 我们可以访问一个不存在的联盟的成员吗
- C++从另一个类访问公共静态向量的正确方法是什么
- 我的简单if-else语句是如何无法访问的代码
- 从C++dll访问C#中的一行主要参数
- 概念TS检查忽略私有访问修饰符
- 访问被拒绝后,c++中的故障保护代码
- 在c++中访问int到类对象的映射时出错
- 我想访问std::unique_ptr中的一个特定元素
- 为什么示例代码访问IUnknown中已删除的内存
- 使用 CTRP 时,是否访问访问父构造函数 UB 中的子属性?
- 在C++中声明可见性/访问权限的方法有何不同
- 访问接口的私有继承如何允许可访问对象访问访问私有访问实现