c++ - 使用 Node.js N-API 调用 C 函数显示的输出不是预期的

标签 c++ c node.js node.js-napi

我是 Node.js N-API 的新手。让我直接进入问题。

我正在尝试使用 N-API 调用 C 函数 Camellia_Ekeygen,但是函数 m_uKttWork 的输出与直接使用 C++ 代码调用相同的函数不同.

这里是引用的代码和输出。

使用 N-API

模块.cpp

#include <node_api.h>
#include "camellia.h"

napi_value MyFunction(napi_env env, napi_callback_info info) {
    typedef unsigned int KEY_TABLE_TYPE[68];
    typedef unsigned char BYTE;

    BYTE m_byCurrentWorkKey[16] {};
    KEY_TABLE_TYPE m_uKttWork {};

    napi_status status;

    Camellia_Ekeygen( 128, m_byCurrentWorkKey, m_uKttWork );

    napi_value result;
    status = napi_create_array(env, &result);

    napi_value num_result;
    for (int i = 0; i < 68; i++) {
        status = napi_create_uint32(env, m_uKttWork[i], &num_result);
        status = napi_set_element(env, result, i, num_result);
    }

    return result;
}

napi_value Init(napi_env env, napi_value exports) {
    napi_status status;
    napi_value fn;

    status = napi_create_function(env, NULL, 0, MyFunction, NULL, &fn);
    status = napi_set_named_property(env, exports, "my_function", fn);

    return exports;
}

NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)

模块.js

const addon = require('./build/Release/module');
console.log(addon.my_function());

输出

$ node module.js
[ 0,
  0,
  0,
  0,
  1827423791,
  382301878,
  1852628593,
  3123771802,
  0,
  0,
  0,
  0,
  588766488,
  3143317110,
  1865976676,
  2093823798,
  4002168422,
  2604339595,
  1169317293,
  2610640796,
  0,
  0,
  0,
  0,
  523455949,
  2294675270,
  0,
  0,
  2800143847,
  4221767577,
  1724826722,
  292329323,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  1169317293,
  2610640796,
  4002168422,
  2604339595,
  0,
  0,
  0,
  0,
  3143317110,
  1865976676,
  2093823798,
  588766488,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0 ]
(node:3475) Warning: N-API is an experimental feature and could change at any time.
$ 

直接调用Camellia_Ekeygen

测试.cpp

#include <iostream>
#include "camellia.h"

int main() {
    typedef unsigned char BYTE;
    typedef unsigned int KEY_TABLE_TYPE[68];

    BYTE m_byCurrentWorkKey[16] {};
    KEY_TABLE_TYPE m_uKttWork {};

    Camellia_Ekeygen( 128, m_byCurrentWorkKey, m_uKttWork );

    for (int i = 0; i < 68; i++) {
        std::cout << m_uKttWork[i] << " ";
    }

    std::cout << "\n";
}

输出

$ g++ -std=c++11 -o test test.cpp Camellia.c 
$ ./test 
382301878 1827423791 0 0 1546120148 3860271694 623942010 872017868 1546120148 3860271694 1290497688 4155529454 4122759699 2305910053 1290497688 4155529454 2604339595 4002168422 2610640796 1169317293 4283709980 2844888938 4139420567 2122284241 0 0 3011048906 3223194901 2723350903 3007290908 1170374237 3194057156 0 0 0 0 1821862673 456472600 694825438 3002140226 3073371509 739572990 694825438 3002140226 3073371509 739572990 3672780383 4194169671 1865976676 3143317110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 
$ 

在这种情况下,有什么我应该注意的吗?这几天我一直在寻找线索,但至今仍 headless 绪。感谢您提供任何故障排除指导或引用。

最佳答案

我现在确定实际调用的 Camellia_Ekeygen 不是我提供的 C++ 源文件中的那个。

我在 module.cppcamellia.h 和 C++ 源文件中将函数重命名为 Camellia_Ekeygen1,然后得到预期的输出。

非常感谢您花时间阅读本文。

关于c++ - 使用 Node.js N-API 调用 C 函数显示的输出不是预期的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52069832/

相关文章:

c++ - Win32 向其他进程发送同步事件

c++ - OpenCV - 无法打开我的网络摄像头的窗口

c - 使用 Strtok 存储字符串片段

node.js - 使用没有子域的 Nginx 设置多个 Node 服务器

c++ - 返回类型更改时如何弃用函数 C++

c++ - 从 child 那里获取变量

c++ - 链接到 Lua 5.2.4 的问题,即使在内联编译源代码时也是如此

c - 在循环外使用变量,值在循环内变化

node.js - 完成前浏览器同步与刷新

javascript - POST 请求到本地运行的 node.js 脚本