use strict;
use warnings;

use Win32::API::Struct;
use Data::Dumper;

print "version is ".$Win32::API::Struct::VERSION."\n";
Win32::API::Struct->typedef("FOO2", qw(
                             UCHAR c1;
                             UCHAR c2;
                             ));

#as FOO2, pack code is LCCxxL, sounds right
#as LPFOO2, pack code is LL, which is wrong
Win32::API::Struct->typedef("FOO", qw(
                             DWORD dw1;
                             FOO2 strt1;
                             DWORD dw2;
                             ));

my $struct = Win32::API::Struct->new("FOO");
$struct->{dw1} = 1;
$struct->{strt1}->{c1} = 0xc1;
$struct->{strt1}->{c2} = 0xc2;
$struct->{dw2} = 2;
print Dumper([$struct->getPack()]);
$struct->Pack();
print Dumper($struct->{buffer});
Win32::API::Struct->typedef("FOOPTR", qw(
                             DWORD dw1;
                             LPFOO2 strt1;
                             DWORD dw2;
                             ));
$struct = Win32::API::Struct->new("FOOPTR");
$struct->{dw1} = 1;
$struct->{strt1}->{c1} = 0xc1;
$struct->{strt1}->{c2} = 0xc2;
$struct->{dw2} = 2;
print Dumper([$struct->getPack()]);
$struct->Pack();
print Dumper($struct->{buffer});