【发布时间】:2021-05-19 11:12:07
【问题描述】:
我正在尝试使用 node-addon-api 在 node.js 中运行 c++。
我从媒体上读过一篇写得很好的文章。
但是我想将一个浮点数传递给我的一个函数,并将一个浮点数组传递给另一个函数。
我想从他们两个返回一个浮点数组。
函数示例(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 接受和返回浮点数,它工作正常。
但我不知道如何让它开始使用数组。
任何帮助表示赞赏。
【问题讨论】:
-
为什么不在调用者中分配并通过引用传递?
-
斯塔克,您能详细说明一下吗?您谈论函数参数,但我也需要从该函数返回。我现在找到了一个折衷的解决方案——传递和接收一个字符串,然后在 JS 中解析它以获得我的浮点数。但它显然违背了使用 c++ 的全部目的。
-
生成的项目位于此处:github.com/agt-ru/cone3d 我使用 c++ 进行一些计算并返回一串浮点值,然后在传递给前端的节点中对其进行解析。如果有人对如何提高性能并最终在 c++/node 通信中返回和接收数组有任何建议,或者可能提供文章的链接,并在其中进行了正确解释,我将非常高兴听到答案。
标签: c++ node.js node-addon-api