2

我正在尝试使用 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它工作正常。但我不知道如何让它开始使用数组。任何帮助表示赞赏。

4

1 回答 1

0

我遇到了类似的问题,Napi实例方法期望:

void MethodName(const Napi::CallbackInfo& info);

或者

Napi::Value MethodName(const Napi::CallbackInfo& info);

即使Napi::TypedArray继承自Napi::Objectwhich 继承自Napi::Value,事实证明您必须显式返回 a 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
]
于 2021-10-27T09:30:46.073 回答