NAME
FFI::C::StructDef - Structured data definition for FFI
VERSION
version 0.15
SYNOPSIS
In your C code:
#include <stdint.h>
#include <stdio.h>
typedef struct {
uint8_t red;
uint8_t green;
uint8_t blue;
} color_t;
void
print_color(color_t *c)
{
printf("[%02x %02x %02x]\n",
c->red,
c->green,
c->blue
);
}
In your Perl code:
use FFI::Platypus 1.00;
use FFI::C::StructDef;
my $ffi = FFI::Platypus->new( api => 1 );
# See FFI::Platypus::Bundle for how bundle works.
$ffi->bundle;
my $def = FFI::C::StructDef->new(
$ffi,
name => 'color_t',
class => 'Color',
members => [
red => 'uint8',
green => 'uint8',
blue => 'uint8',
],
);
my $red = Color->new({ red => 255 });
my $green = Color->new({ green => 255 });
$ffi->attach( print_color => ['color_t'] );
print_color($red); # [ff 00 00]
print_color($green); # [00 ff 00]
# that red is a tad bright!
$red->red( 200 );
print_color($red); # [c8 00 00]
DESCRIPTION
This class creates a def for a C struct
.
CONSTRUCTOR
new
my $def = FFI::C::StructDef->new(%opts);
my $def = FFI::C::StructDef->new($ffi, %opts);
For standard def options, see FFI::C::Def.
- members
-
This should be an array reference containing name, type pairs, in the order that they will be stored in the struct.
- trim_string
-
If true, fixed-length strings should be treated as null terminated strings and be trimmed.
METHODS
create
my $instance = $def->create;
my $instance = $def->class->new; # if class was specified
my $instance = $def->create(\%init);
my $instance = $def->class->new(\%init); # if class was specified
This creates an instance of the struct
, returns a FFI::C::Struct.
You can optionally initialize member values using %init
.
trim_string
my $bool = $def->trim_string;
Returns true if fixed-length strings should be treated as null terminated strings and be trimmed.
SEE ALSO
- FFI::C
- FFI::C::Array
- FFI::C::ArrayDef
- FFI::C::Def
- FFI::C::File
- FFI::C::PosixFile
- FFI::C::Struct
- FFI::C::StructDef
- FFI::C::Union
- FFI::C::UnionDef
- FFI::C::Util
- FFI::Platypus::Record
AUTHOR
Graham Ollis <plicease@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2020-2022 by Graham Ollis.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.