package FFI::Raw::MemPtr; $FFI::Raw::MemPtr::VERSION = '0.32'; use strict; use warnings; =head1 NAME FFI::Raw::MemPtr - FFI::Raw memory pointer type =head1 VERSION version 0.32 =head1 DESCRIPTION A B represents a memory pointer which can be passed to functions taking a C argument. The allocated memory is automatically deallocated once the object is not in use anymore. =head1 METHODS =head2 new( $length ) Allocate a new C of size C<$length> bytes. =head2 new_from_buf( $buffer, $length ) Allocate a new C of size C<$length> bytes and copy C<$buffer> into it. This can be used, for example, to pass a pointer to a function that takes a C struct pointer, by using C or the L module to create the actual struct content. For example, consider the following C code struct some_struct { int some_int; char some_str[]; }; extern void take_one_struct(struct some_struct *arg) { if (arg -> some_int == 42) puts(arg -> some_str); } It can be called using FFI::Raw as follows: use FFI::Raw; my $packed = pack('ix![p]p', 42, 'hello'); my $arg = FFI::Raw::MemPtr -> new_from_buf($packed, length $packed); my $take_one_struct = FFI::Raw -> new( $shared, 'take_one_struct', FFI::Raw::void, FFI::Raw::ptr ); $take_one_struct -> ($arg); Which would print C. =head2 new_from_ptr( $ptr ) Allocate a new C pointing to the C<$ptr>, which can be either a C or a pointer returned by another function. This is the C equivalent of a pointer to a pointer. =head2 tostr( [$length] ) Convert a C to a Perl string. If C<$length> is not provided, the length of the string will be computed using C. =head1 AUTHOR Alessandro Ghedini =head1 LICENSE AND COPYRIGHT Copyright 2013 Alessandro Ghedini. This program is free software; you can redistribute it and/or modify it under the terms of either: the GNU General Public License as published by the Free Software Foundation; or the Artistic License. See http://dev.perl.org/licenses/ for more information. =cut 1; # End of FFI::Raw::MemPtr