in reply to Re: Problems with Win32::API module
in thread Problems with Win32::API module

Here is the corrected code.. my fault:
#!/usr/bin/perl use Win32::API; my $lpBuffer = "\0" x 64; my $ZP4StartSession = new Win32::API("ZP4", "ZP4StartSession", [N], P) + || die Win32::FormatMessage(Win32::GetLastError); my $LLHandle = $ZP4StartSession->Call($lpBuffer) || die Win32::FormatM +essage(Win32::GetLastError);

Replies are listed 'Best First'.
Re^3: Problems with Win32::API module (addr)
by tye (Sage) on May 01, 2007 at 16:17 UTC

    The "N" in "[N]" causes $lpBuffer to be interpretted as a number. "\0" x 64 as a number is just 0. Although you tell us nothing about ZP4StartSession(), it appears clear that what you want to pass to it is a pointer to the buffer you allocated in $lpBuffer. Win32::API doesn't support this type of argument very well / easily. It only supports pointers to '\0'-terminated strings.

    However, it might work to use [P] instead. That depends on implementation details of Win32::API that I am not certain of.

    If that doesn't work, then you should probably do:

    my $lpBuffer= "\0" x 64; my $bufAddr= unpack "L", pack "p", $lpBuffer; #... ... $ZP4StartSession->Call( $bufAddr ) ...

    - tye