C::DynaLib::Struct

C::DynaLib::Struct is a tool for handling the C `struct' data type.
Download

C::DynaLib::Struct Ranking & Summary

Advertisement

  • Rating:
  • License:
  • Perl Artistic License
  • Price:
  • FREE
  • Publisher Name:
  • John Tobey
  • Publisher web site:
  • http://search.cpan.org/~jtobey/

C::DynaLib::Struct Tags


C::DynaLib::Struct Description

C::DynaLib::Struct is a tool for handling the C `struct' data type. C::DynaLib::Struct is a tool for handling the C `struct' data type.SYNOPSIS use C::DynaLib::Struct; Define C::DynaLib::Struct( $struct_tag, $template0, @field_names0, ... ); $rstruct = tie( $struct, $struct_tag ); $value = $rstruct->my_field(); $rstruct->my_field( $new_value ); $pointer_to_struct = pack( 'p', $struct ); $struct = $new_struct; # assigns all fields at once # after passing pointer-to-struct to a C function: $rstruct->Unpack(); $returned_value = $rstruct->my_field();When mixing Perl and C, the conversion of data types can be rather tedious and error-prone. This module provides an abstraction from Perl's pack and unpack operators for using structures whose member data types and positions do not change.Here are some examples of C code that deals with a struct. On the right are some possible Perl equivalents. C Perl - ---- typedef struct { use C::DynaLib::Struct; int m_int; Define C::DynaLib::Struct( double m_double; 'Foo', char * m_string; 'i' => , } Foo; 'd' => , 'p' => ); # or, equivalently, Define C::DynaLib::Struct('Foo', 'idp', ); Foo foo; Foo *pfoo = &foo; $rfoo = tie ($foo, 'Foo'); i = pfoo->m_int; $i = $rfoo->m_int; d = foo.m_double; $d = (tied $foo)->m_double; pfoo->m_string = "hi"; $rfoo->m_string("hi"); Foo bar; tie ($bar, 'Foo'); bar = foo; $bar = $foo; void do_foo(Foo *arg); use C::DynaLib; $lib = new C::DynaLib("-lfoo"); $do_foo = $lib->DeclareSub("do_foo","","P"); # or you could write an XSUB. do_foo(&foo); &$do_foo($foo); returned_i = foo.m_int; $rfoo->Unpack(); $returned_i = $rfoo->m_int; Requirements: · Perl


C::DynaLib::Struct Related Software