[rt.cpan.org #74578]

[email protected] ("Douglas Wilson via RT")
Newsgroups perl.libwin32
Message-ID <[email protected]>
Tue Jan 31 18:22:54 2012: Request 74578 was acted upon.
Transaction: Ticket created by DOUGW
       Queue: Win32-API
     Subject: (No subject given)
   Broken in: 0.64
    Severity: Normal
       Owner: Nobody
  Requestors: [email protected]
      Status: new
 Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=74578 >



<p>
When using Win32::API::Struct on 64bit, I get extraneous "x" (null
bytes) in the pack/unpack templates.
When I do a straight unpack without the x's, I get the data correctly.
</p>
<p>
Or if I remove the 'align' logic in Win32::API::Struct::getPack() and
getUnpack(), I also get a correct result.
Is this a bug or is there something else I should be doing?
</p>

<pre>
  $Win32::API::DEBUG = 1;

  Win32::API::Struct->typedef('DLXSTRUCT', qw(
    CHAR    VarName[12];
    LONG32  StartDate;
    LONG32  EndDate;
    INT32   NumberObs;
    INT32   Frequency;
    ULONG32 DateTimeMod;
    INT32   Magnitude;
    INT32   DecPrecision;
    INT32   DifType;
    INT32   AggType;
    CHAR  DataType[8];
    CHAR  Group[4];
    CHAR  Source[6];
    CHAR  Geography1[8];
    CHAR  Geography2[8];
    CHAR  Descriptor[82];
    CHAR  ShortSource[10];
    CHAR  LongSource[70];
  )) or die "Err";

  # 'PPS' when using the Struct above
  # 'PPP' when using the buffer below
  my $GetInfo = Win32::API->new(
  #  $dll, 'DLXGetInfo', 'PPP', 'I',
    $dll, 'DLXGetInfo', 'PPS', 'I',
  ) or die "Err: $!";

  # When using 'PPP' above
  #my $dlx = " " x 246;


  # Character fields missing first 3 characters, number fields are garbage
  my $info_result = $get_info->Call('', $field, $dlx);
  # Debug output:
  # (PM)Struct::getPack: DLXSTRUCT(buffer) =
pack(a12xlxxliiLiiiia8a4a6a8a8a82a10a71, 48)
  # (PM)Struct::getUnpack(DLXSTRUCT):
unpack(Z12xlxxliiLiiiiZ8Z4Z6Z8Z8Z82Z10Z71, ...field names)

  # For 'PPP' call above
  # Everything ok
  #my ($name, $start, $end, $n_obs, $freq, $dt_mod, $mag, $prec,
  #    $diftype, $agg_type, $data_type, $group, $source, $geo1, $geo2,
$desc, $short_source, $long_source)
  # = unpack('Z12 l l i i L i i i i Z8 Z4 Z6 Z8 Z8 Z82 Z10 Z70', $dlx);
</pre>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.