1
node-ffi를 사용하여 기존 C 라이브러리를 래핑하려고하는데 반환 된 결과를 읽지 못하는 것 같습니다. 함수가 C 구조체nodejs에서 데이터를 읽는 방법 길이가 0 인 node-ffi로 만든 버퍼
typedef struct {
int size;
void *ptr;
} datum;
및 datum.ptr를 나타내는 노드 버퍼의 길이 필드를 반환 0
여기 문제를 표시하고, 전체 C 코드이기 때문에 이러한 상황은 약간 어색.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
void *ptr;
int size;
} datum;
datum get() {
int r = 23;
datum *p = malloc(sizeof(*p));
if(!p) {
printf("malloc failed\n");
exit(1);
}
p->ptr = malloc(sizeof(r));
if(!p->ptr) {
printf("malloc failed\n");
exit(1);
}
p->size = sizeof(r);
memcpy(p->ptr, &r, sizeof(r));
printf("p->size = %d\n", p->size);
printf("p->ptr = %p\n", p->ptr);
return *p;
}
그리고 여기에는 자바 스크립트입니다 :
#!/opt/local/bin/node
var ref = require("ref");
var ffi = require("ffi");
var util = require("util");
var Struct = require('ref-struct');
var datum = Struct({
'ptr': 'pointer',
'size': 'int'
});
var wrapper = ffi.Library('test.dylib', {
"get": [ datum, [ ] ] ,
});
let result = wrapper.get();
console.log(result);
console.log(result.ptr);
console.log("result.ptr.length = " + result.ptr.length);
console.log(result.ptr.readIntLE(0, 4, true));
console.log(result.ptr.readIntBE(0, 4, true));
console.log(result.ptr.readUInt8(0, true));
console.log(result.ptr.readUInt8(1, true));
console.log(result.ptr.readUInt8(2, true));
console.log(result.ptr.readUInt8(3, true));
그리고 여기에 출력입니다 : P-> PTR 버퍼가 모두 0x103b02e20 그래서 난 데이터가 있다고 생각 말할
p->size = 4
p->ptr = 0x103b02e20
{ ptr: <[email protected] >,
size: 4,
'ref.buffer': <[email protected] 20 2e b0 03 01 00 00 00 04 00 00 00 00 00 00 00> }
<[email protected] >
result.ptr.length = 0
NaN
NaN
undefined
undefined
undefined
undefined
공지 사항 , 난 그냥 버퍼 밖으로 어떤 이유로 읽을 수 없습니다.
누구나 내가 놓친 아이디어가 있습니까?
'null'을 제공합니다. –
하지만 'console.log ("dref ="+ ref.readCString (result.ptr)); "는 데이터가 있음을 보여줍니다. readCString은 길이가 0이므로 무시합니다. –