---
name: "FFI::C::StructDef"
section: "3pm"
platform: "linux"
package: "libffi-c-perl"
version: "0.15-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/FFI::C::StructDef"
---

# FFI::C::StructDef(3pm)

Structured data definition for FFI

## 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.
