in reply to Getting the actual address of a scalar

You'll just die for $address = pack 'L!', pack 'p', $scalar;. That will stuff $address with a pointer to the actual null terminated char[] in the $scalar variable. This is also the point at which it is immensely helpful to read perlguts and sv.h to see how perl actually works. That char[] array can contain null values as data so if you are working with binary data then you'd use $address = pack 'L!', pack 'P', $scalar instead.

That example assumes you can already send that message to the window and just need the char* for the data. If you aren't at *that* point yet then you probably want to check out win32 and see about any message passing modules. If you're using ActiveState perl then apparently some of those modules already come bundled but I've never tried them. If all else fails whip out Inline::C and if *that* fails go to XS where anything is possible.

Update: forgot to put the last paragraph in

Replies are listed 'Best First'.
Re: (SOLVED) Getting the actual address of a scalar
by jplindstrom (Monsignor) on Oct 01, 2002 at 07:32 UTC
    That got me going in the right direction. After unpacking the long value it is suitable to pass on to SendMessage. Many thanks!!!

    =head2 GetWindowText($hwind) Return text of $hwind, or undef on errors. =cut sub GetWindowText { my ($hwind) = @_; my $len = Win32::GUI::SendMessage($hwind, 0x000E, 0, 0) or return( +""); #WM_GETTEXTLENGTH my $buf = " " x ($len + 1); my $addrBuf = unpack("L", pack('p', $buf)); Win32::GUI::SendMessage($hwind, 0x000D, $len + 1, $addrBuf) or ret +urn(undef); #WM_GETTEXT return( substr($buf, 0, $len) ); }

    I guess the rest (catching the IE URL) will become a module some day. Please /msg me if you are interested in code before that.

    /J