Subject: Re: [ruby-ffi] Pointer to a struct - how to cast? |
From: DA |
Date: 5/20/10 1:00 PM |
To: ruby-ffi@googlegroups.com |
On Thu, May 20, 2010 at 1:19 PM, Jeremy Voorhis <jvoorhis@gmail.com> wrote:
The address is in the output of inspect (0x4145ec0). You can also use Pointer#to_i.
Thanks Jeremy, so I'm getting some weird numbers for the addresses,
which makes think they're not valid. I have an array pointers to
these structs:
for p in parr
puts "p: #{p} inspect: #{p.inspect}"
i+= 1
break if i > 10
if p.to_i > 10
my_struct = FM::FTextItemT.new p
puts "test: #{my_struct[:dataType]}"
end
end
I'm getting:
p: #<FFI::Pointer:0x317a04> inspect: #<FFI::Pointer address=00000001>
p: #<FFI::Pointer:0x3179dc> inspect: #<FFI::Pointer address=00000001>
p: #<FFI::Pointer:0x3179b4> inspect: #<FFI::Pointer address=003F7330>
test: 7566450
p: #<FFI::Pointer:0x31798c> inspect: #<FFI::Pointer address=00000008>
p: #<FFI::Pointer:0x317964> inspect: #<FFI::Pointer address=00000004>
p: #<FFI::Pointer:0x3452c4> inspect: #<FFI::Pointer address=00000000>
p: #<FFI::Pointer:0x317928> inspect: #<FFI::Pointer address=00000001>
p: #<FFI::Pointer:0x317900> inspect: #<FFI::Pointer address=00000001>
p: #<FFI::Pointer:0x3178d8> inspect: #<FFI::Pointer address=003F7368>
test: 1634615657
p: #<FFI::Pointer:0x3178b0> inspect: #<FFI::Pointer address=0000000F>
Here's how I'm getting the array:
// c struct:
typedef struct {
UIntT len;
F_TextItemT *val;
} F_TextItemsT;
// ruby def:
class FTextItemsT < FFI::Struct
layout :len, :uint,
:val, :pointer
end
// ruby code:
tis = FM.FApiGetText(docid, flowid, (FM.FTIString | FM.FTILineEnd));
parr = tis[:val].read_array_of_pointer(tis[:len])
puts "tis len: #{tis[:len]}"
The tis[:len] gives me the same value as calling this code in c, so
I'm pretty sure the FApiGetText call is working and I'm getting a
valid struct returned. Am I using read_array_of_pointer wrong?
Thanks,
Drew