我正在尝试使用node-addon-api在node.js中运行c++。我从medium上读到了一篇写得很好的精致文章。但是我想将一个浮点数传递给我的一个函数,并将一个浮动数组传递给另一个函数。我想从这两个函数返回一个浮点数组。函数示例(greeting.cpp)
#include <iostream>
#include <string>
#include <cmath>
#include "greeting.h"
float* helloUser( float name ) {
float* result = new float[3];
result[0] = 1;
result[1] = 2;
result[2] = name;
return result;
}以及带有模块原生实现的index.cpp的代码:
#include <napi.h>
#include <string>
#include "greeting.h"
Napi::Float32Array greetHello(const Napi::CallbackInfo& info) {
Napi::Env env = info.Env();
float user = (float) info[0].ToNumber();
float* result = helloUser( user );
return Napi::Float32Array::New(env, result);
}
Napi::Object Init(Napi::Env env, Napi::Object exports) {
exports.Set(
Napi::String::New(env, "greetHello"), // property name => "greetHello"
Napi::Function::New(env, greetHello) // property value => `greetHello` function
);
return exports;
}
NODE_API_MODULE(greet, Init)问题是,Napi::Float32Array不起作用,我试过Napi::TypedArrayOf<float>,它也不起作用。我对编写模块不是很感兴趣。我只想让在节点中运行的纯c++代码将其结果发送到前端。我尝试用Napi::Number接受和返回浮点数,它工作得很好。但是我不知道如何让它开始与数组一起工作。任何帮助都是非常感谢的。
发布于 2021-10-27 09:30:46
我遇到了类似的问题,Napi instance methods希望:
void MethodName(const Napi::CallbackInfo& info);或
Napi::Value MethodName(const Napi::CallbackInfo& info);尽管Napi::TypedArray继承了从Napi::Value继承的Napi::Object,但您必须显式返回一个Napi::Value,如下所示:
Napi::Value greetHello(Napi::CallbackInfo const& info)
{
Napi::Float32Array arr = Napi::Float32Array::New(info.Env(), 16);
arr[0] = 1;
arr[15] = 16;
return arr;
}这会让你得到一个Float32Array
{
greetHello: [Function (anonymous)]
}
Float32Array(16) [
1, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0,
0, 0, 0, 16
]https://stackoverflow.com/questions/67602113
复制相似问题