C::DynaLib::StructC::DynaLib::Struct is a tool for handling the C `struct' data type. | |
Download |
C::DynaLib::Struct Ranking & Summary
Advertisement
- 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