赞
踩
- #include <assert.h>
- #include "addon_api.h"
- #include "stdio.h"
-
- napi_value CArrayBuffSum(napi_env env, napi_callback_info info)
- {
- napi_status status;
- const size_t MaxArgExpected = 1;
- napi_value args[MaxArgExpected];
- size_t argc = sizeof(args) / sizeof(napi_value);
-
- status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
- assert(status == napi_ok);
- if (argc < 1)
- napi_throw_error(env, "EINVAL", "Too few arguments");
-
- napi_value buff = args[0];
- napi_valuetype valuetype;
- status = napi_typeof(env, buff, &valuetype);
- assert(status == napi_ok);
-
- if (valuetype == napi_object)
- {
- bool isArrayBuff = 0;
- status = napi_is_arraybuffer(env, buff, &isArrayBuff);
- assert(status == napi_ok);
-
- if (isArrayBuff != true)
- napi_throw_error(env, "EINVAL", "Expected an ArrayBuffer");
- }
-
- int32_t *buff_data = NULL;
- size_t byte_length = 0;
- int32_t sum = 0;
-
- napi_get_arraybuffer_info(env, buff, (void **)&buff_data, &byte_length);
- assert(status == napi_ok);
-
- printf("\nC: Int32Array size = %d, (ie: bytes=%d)",
- (int)(byte_length / sizeof(int32_t)), (int)byte_length);
- for (int i = 0; i < byte_length / sizeof(int32_t); ++i)
- {
- sum += *(buff_data + i);
- printf("\nC: Int32ArrayBuff[%d] = %d", i, *(buff_data + i));
- }
-
- napi_value rcValue;
- napi_create_int32(env, sum, &rcValue);
-
- return (rcValue);
- }

- 'use strict'
- const myaddon = require('bindings')('mync1');
-
- function test1() {
- const array = new Int32Array(10);
-
- for (let i = 0; i < 10; ++i)
- array[i] = i * 5;
-
- const sum = myaddon.ArrayBuffSum(array.buffer);
- console.log();
- console.log(`js: Sum of the array = ${sum}`);
- }
-
- test1();
- C: Int32Array size = 10, (ie: bytes=40)
- C: Int32ArrayBuff[0] = 0
- C: Int32ArrayBuff[1] = 5
- C: Int32ArrayBuff[2] = 10
- C: Int32ArrayBuff[3] = 15
- C: Int32ArrayBuff[4] = 20
- C: Int32ArrayBuff[5] = 25
- C: Int32ArrayBuff[6] = 30
- C: Int32ArrayBuff[7] = 35
- C: Int32ArrayBuff[8] = 40
- C: Int32ArrayBuff[9] = 45
- js: Sum of the array = 225
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。