如何使用ffi处理引用?

时间:2018-07-17 17:11:37

标签: node.js ffi ref

我有以下用node-gyp编译的c ++函数。

void InterfaceTestOne(const string & mytest)
{       
        const string *ptr = &mytest; 
        printf("The variable X is at 0x%p\n", (void *)ptr);
        cout << mytest.length() << endl;
        cout << mytest << endl;
}

和nodejs代码:

var math = ffi.Library(main, {
    "_Z16InterfaceTestOneRKSsi": ["void",  [ref.refType(string)]],

});

var output = ref.allocCString('hello alex');

console.log("length", output.length) #12
console.log("address", output.address()) #4353704472
console.log("ref", output.ref()) # <Buffer@0x103804228 18 42 80 03 01 00 00 00>

math._Z16InterfaceTestOneRKSsi(output.ref())

#c++ output
The variable X is at 0x0x103804230 
4347093136 <-- mytest size 
This is TestOne
hello alex�����s�P��X��0��
                           ����������������������p
p�]���^@��psp���5�����@4������(�����G����� ��qf���6�ՃP���f���6�Ճ���q�X؃ \���u������������3������3������!Ą
p�?�����p                                                                                                �J
����h����������8n���������8v
�d�����s����� ����������(������a......

因此,我得到的不是字符串大小12,而是c ++大小4353704472 nodejs和c ++中的ref地址也为0x103804228和0x0x103804230。 并且看起来这就是为什么除了文字之外我还得到了很多垃圾。

有什么办法解决吗?

0 个答案:

没有答案