How to handle 64 bit variables on 32 bit machines?

Hi,

I’d like to use the ruby/dl library to access function in a C library from
ruby.
Now these functions take 64 bit parameters und my machine (x86) is a 32 bit
machine.
As I saw in lib/ruby/1.8/dl/types.rb this is the place where the types are
listed
which ruby/dl supports.
Now if I could add a type uint64 or something and an appropriate pack/unpack

method, I guess everything would work.

I tried pack(“LL”), but this doesn’t work.

My C functions look like:

void doSomething(uint64_t foo);

and I need to access them:

module Test

extern "void doSomething(uint64)"
end

call it

Test.doSomething(7)

when I insert the lines

[“uint64”, “LL”,
proc{|v| [v].pack(“LL”).unpack(“ll”)[0]},
proc{|v| [v].pack(“ll”).unpack(“LL”)[0]},
proc{|v| [v].pack(“LL”).unpack(“ll”)[0]},
proc{|v| [v].pack(“ll”).unpack(“LL”)[0]}],

into types.rb, it recognizes the type and imports the functions, but then
says
when calling the function:

/usr/local/lib/ruby/1.8/dl/types.rb:76:in pack': too few arguments (ArgumentError) from /usr/local/lib/ruby/1.8/dl/types.rb:76 from /usr/local/lib/ruby/1.8/dl/types.rb:76:incall’
from /usr/local/lib/ruby/1.8/dl/import.rb:200:in encode_types' from /usr/local/lib/ruby/1.8/dl/import.rb:200:incall’
from (eval):3:in `sLMS_Sqr3’
from test.rb:17

I’m still quite new to ruby, any help would be very much appreciated.

Bye
Alex

···


NEU FÜR ALLE - GMX MediaCenter - für Fotos, Musik, Dateien…
Fotoalbum, File Sharing, MMS, Multimedia-Gruß, GMX FotoService

Jetzt kostenlos anmelden unter http://www.gmx.net

+++ GMX - die erste Adresse für Mail, Message, More! +++

Perhaps this from faiermud’s ruby 1.8.0 changes list:

Array#pack, String#unpack
New templates ‘q’ and ‘Q’ for 64bit integer (signed and
unsigned respectively).

···

On Tue, Oct 28, 2003 at 01:08:17AM +0900, Alexander Neundorf wrote:

Now if I could add a type uint64 or something and an appropriate pack/unpack