nodejs與c語言深度互動

來源:互聯網
上載者:User

標籤:print   lex   ble   sizeof   讀取   type   end   return   int   

2、node-ffi

1)nodejs從c語言讀取資料

factorial.c

#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <string.h>#if defined(WIN32) || defined(_WIN32)#define EXPORT __declspec(dllexport)#else#define EXPORT#endiftypedef struct{    double lon;    double lat;}gps_info_t;gps_info_t* gps;void get_gps_shm_init(void){    gps = (gps_info_t *)malloc(sizeof(gps_info_t));}EXPORT gps_info_t* get_gps_info(void) {  get_gps_shm_init();  gps->lon = 55.5;  gps->lat = 55.5;return gps;}

factorial.js

var ffi = require(‘../node-ffi-master/‘)var refStruct = require(‘ref-struct‘);var refArray = require(‘ref-array‘);var ref = require(‘ref‘);//gps date structvar gps = refStruct({    ‘lon‘:ref.types.double,    ‘lat‘:ref.types.double,});var gpsStructArrayType = refArray(gps);var gps_info = gpsStructArrayType(10);var libfactorial = ffi.Library(‘./libfactorial‘, {  ‘get_gps_info‘: [ gpsStructArrayType, [ ‘void‘ ] ],});gps_info = libfactorial.get_gps_info(0)console.log(‘Your output: ‘ + gps_info[0].lon)console.log(‘Your output: ‘ + gps_info[0].lat)

 

2)nodejs向c語言寫資料

factorial.c

#include <stdint.h>#include <stdio.h>#include <stdlib.h>#include <stdbool.h>#include <string.h>#if defined(WIN32) || defined(_WIN32)#define EXPORT __declspec(dllexport)#else#define EXPORT#endiftypedef struct{    char *user_name;    char *passwd;    char *dev_id;}user_info_t;user_info_t* user;void put_user_info_shm_init(void){    user = (user_info_t *)malloc(sizeof(user_info_t));    user->user_name = (char*)malloc(32*sizeof(char));    user->passwd = (char*)malloc(32*sizeof(char));    user->dev_id = (char*)malloc(32*sizeof(char));}EXPORT void put_user_info(user_info_t* user_info) {  put_user_info_shm_init();  printf("get userinfo(user_name):%s",user_info->user_name);  printf("get userinfo(user_name):%s",user_info->passwd);  printf("get userinfo(user_name):%s",user_info->dev_id);}

 factorial.js

var ffi = require(‘../node-ffi-master/‘)var refStruct = require(‘ref-struct‘);var refArray = require(‘ref-array‘);var ref = require(‘ref‘);//ui date structvar user = refStruct({    ‘user_name‘:‘string‘,    ‘passwd‘:‘string‘,    ‘dev_id‘:‘string‘,});var userStructArrayType = refArray(user);var user_info = userStructArrayType(1);user_info[0].user_name = ‘zdd‘;user_info[0].passwd = ‘123‘;user_info[0].dev_id = ‘65535‘;var libfactorial = ffi.Library(‘./libfactorial‘, {  ‘put_user_info‘: [ ‘void‘, [ userStructArrayType ] ]});libfactorial.put_user_info(user_info)console.log(‘Your input: ‘ + user_info[0].user_name)console.log(‘Your input: ‘ + user_info[0].passwd)console.log(‘Your input: ‘ + user_info[0].dev_id)

 

nodejs與c語言深度互動

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.