如何在Ruby中取消引用指针?
我正在使用FFI调用一些C / C ++ DLL函数。其中一个函数返回一个int数组(int *)。
extern "C" WIN32PROJECT3_API int* TestData()
{
int* v;
v = (int*)malloc(sizeof(int)* 1000);
v[3] = 123456;
return v;
}
我在Ruby中有指针,但是当我尝试
时v = TestModule.TestData();
puts v[3]
我得到的是:
#<FFI::Pointer address=0x700f5e>
这是完全正常的,因为这是指针的实际值。我只需要解除它以获得值“123456”
答案 0 :(得分:3)
答案 1 :(得分:2)
您正在寻找AbstractMemory#get_array_of_int32方法。
#get_array_of_int32(偏移量,长度)⇒数组&lt; Fixnum&gt;
从偏移
offset
获取内存中的32位整数。
v = TestModule.TestData.get_array_of_int32(0, 1000) # first convert your memory pointer to array
puts v[3] #=> 123456
您也可以使用AbstractMemory#get_int32
方法:
size_of_int = 4 # size of int32 in bytes
offset = 0
v = TestModule.TestData
v[3 * size_of_int].get_int32(offset) #=> 123456
答案 2 :(得分:1)
我自己从未用Ruby调用过C / C ++,但基于文档看起来你必须调用read_string
然后将其转换为int:
v[3].read_string.to_i
希望这有帮助。