🌻 📖 FFI::Platypus::Legacy::Raw::MemPtr


FFI::Platypus::Legacy::Raw::MemPtr - FFI::Platypus::Legacy::Raw memory pointer type


version 0.06


FFI::Platypus::Legacy::Raw and friends are a fork of FFI::Raw that uses FFI::Platypus instead of FFI::Raw's own libffi implementation. It is intended for use when migrating from FFI::Raw to FFI::Platypus. The main reason one might have for switching from Raw to Platypus is because Platypus is actively maintained, provides a more powerful interface, can be much faster when functions are "attached", and works on more platforms than Raw. This module should be a drop in replacement for FFI::Raw, simply replace all instances of FFI::Raw to FFI::Platypus::Legacy::Raw. See also Alt::FFI::Raw::Platypus for a way to use this module without making any source code changes.

A FFI::Platypus::Legacy::Raw::MemPtr represents a memory pointer which can be passed to functions taking a FFI::Platypus::Legacy::Raw::ptr argument.

The allocated memory is automatically deallocated once the object is not in use anymore.



 FFI::Platypus::Legacy::Raw::MemPtr->new( $length );

Allocate a new FFI::Platypus::Legacy::Raw::MemPtr of size $length bytes.


 my $memptr = FFI::Platypus::Legacy::Raw::MemPtr->new_from_buf( $buffer, $length );

Allocate a new FFI::Platypus::Legacy::Raw::MemPtr of size $length bytes and copy $buffer into it. This can be used, for example, to pass a pointer to a function that takes a C struct pointer, by using pack() or the Convert::Binary::C 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)

It can be called using FFI::Platypus::Legacy::Raw as follows:

 use FFI::Platypus::Legacy::Raw;
 my $packed = pack('ix![p]p', 42, 'hello');
 my $arg = FFI::Platypus::Legacy::Raw::MemPtr->new_from_buf($packed, length $packed);
 my $take_one_struct = FFI::Platypus::Legacy::Raw->new(
   $shared, 'take_one_struct',
   FFI::Platypus::Legacy::Raw::void, FFI::Platypus::Legacy::Raw::ptr

Which would print hello.


 my $memptr = FFI::Platypus::Legacy::Raw::MemPtr->new_from_ptr( $ptr );

Allocate a new FFI::Platypus::Legacy::Raw::MemPtr pointing to the $ptr, which can be either a FFI::Platypus::Legacy::Raw::MemPtr or a pointer returned by another function.

This is the FFI::Platypus::Legacy::Raw equivalent of a pointer to a pointer.



 my $memptr = FFI::Platypus::Legacy::Raw::MemPtr->to_perl_str;
 my $memptr = FFI::Platypus::Legacy::Raw::MemPtr->to_perl_str( $length );

Convert a FFI::Platypus::Legacy::Raw::MemPtr to a Perl string. If $length is not provided, the length of the string will be computed using strlen().


Original author: Alessandro Ghedini (ghedo, ALEXBIO)

Current maintainer: Graham Ollis <plicease@cpan.org>


Bakkiaraj Murugesan (bakkiaraj)

Dylan Cali (CALID)

Brian Wightman (MidLifeXis, MLX)

David Steinbrunner (dsteinbrunner)

Olivier Mengué (DOLMEN)


This software is copyright (c) 2012 by Alessandro Ghedini.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.