Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
C Shell Assembly Ruby

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
bench
ext/ffi_c
gen
lib
libtest
nbproject
samples
spec
tasks
.autotest
.gitignore
.hgignore
.yardopts
COPYING
COPYING.LESSER
History.txt
LICENSE
README.rdoc
Rakefile
ruby-ffi-Makefile.mk

README.rdoc

ruby-ffi

http://wiki.github.com/ffi/ffi

DESCRIPTION:

Ruby-FFI is a ruby extension for programmatically loading dynamic libraries, binding functions within them, and calling those functions from Ruby code. Moreover, a Ruby-FFI extension works without changes on Ruby and JRuby. Discover why should you write your next extension using Ruby-FFI here.

FEATURES/PROBLEMS:

  • It has a very intuitive DSL

  • It supports all C native types

  • It supports C structs (also nested), enums and global variables

  • It supports callbacks

  • It has smart methods to handle memory management of pointers and structs

SYNOPSIS:

require 'ffi'

module MyLib
  extend FFI::Library
  ffi_lib 'c'
  attach_function :puts, [ :string ], :int
end

MyLib.puts 'Hello, World using libc!'

For less minimalistic and more sane examples you may look at:

  • the samples/ folder

  • the examples on the wiki

  • the projects using FFI listed on this page

REQUIREMENTS:

  • You need a sane building environment in order to compile the extension.

DOWNLOAD/INSTALL:

From rubyforge:

[sudo] gem install ffi

or from the git repository on github:

git clone git://github.com/ffi/ffi.git
cd ffi
rake gem:install

LICENSE:

See LICENSE file.

CREDITS

The following people have submitted code, bug reports, or otherwide contributed to the success of this project:

Alban Peignier <alban.peignier@free.fr> Aman Gupta <aman@tmm1.net> Andrea Fazzi <andrea.fazzi@alcacoop.it> Andreas Niederl <rico32@gmx.net> Andrew Cholakian <andrew@andrewvc.com> Antonio Terceiro <terceiro@softwarelivre.org> Brian Candler <B.Candler@pobox.com> Brian D. Burns <burns180@gmail.com> Bryan Kearney <bkearney@redhat.com> Charlie Savage <cfis@zerista.com> Chikanaga Tomoyuki <nagachika00@gmail.com> Hongli Lai <hongli@phusion.nl> Ian MacLeod <ian@nevir.net> Jake Douglas <jake@shiftedlabs.com> Jean-Dominique Morani <jdmorani@mac.com> Jeremy Hinegardner <jeremy@hinegardner.org> Jesús García Sáez <blaxter@gmail.com> Joe Khoobyar <joe@ankhcraft.com> Jurij Smakov <jurij@wooyd.org> KISHIMOTO, Makoto <ksmakoto@dd.iij4u.or.jp> Kim Burgestrand <kim@burgestrand.se> Lars Kanis <kanis@comcard.de> Luc Heinrich <luc@honk-honk.com> Luis Lavena <luislavena@gmail.com> Matijs van Zuijlen <matijs@matijs.net> Matthew King <automatthew@gmail.com> Mike Dalessio <mike.dalessio@gmail.com> NARUSE, Yui <naruse@airemix.jp> Park Heesob <phasis@gmail.com> Shin Yee <shinyee@speedgocomputing.com> Stephen Bannasch <stephen.bannasch@gmail.com> Suraj N. Kurapati <sunaku@gmail.com> Sylvain Daubert <sylvain.daubert@laposte.net> Victor Costan beoran@gmail.com ctide <christide@christide.com> emboss <Martin.Bosslet@googlemail.com> hobophobe <unusualtears@gmail.com> meh <meh@paranoici.org> postmodern <postmodern.mod3@gmail.com> wycats@gmail.com <wycats@gmail.com>

Something went wrong with that request. Please try again.