Thanks Lloyd. that was good info.
I couldn't find related problem in the archives ... can you please send me
the URL to the discussion you mentioned ? I hope to learn more from that
thread.
Thanks for your time,
Sumitro Chowdhury
From: Lloyd Sartor <[EMAIL PROTECTED]>
To: "Sumitro Chowdhury" <[EMAIL PROTECTED]>
CC: [email protected],
[EMAIL PROTECTED]
Subject: Re: problems with Win32::API import
Date: Fri, 17 Jun 2005 17:09:12 -0500
[EMAIL PROTECTED] wrote on 06/17/2005 02:01:21 PM:
> Hi Masters.
>
> This code on my WinXP crashes perl.
> Searched the list , but only the old syle ( Method 1 or Method 2 ) comes
up.
> I am trying Method 3 , new with .40 onwards.
>
> Please can somebody point out my "basic" mistake :
>
> print "TYPE DWORD is known to Win32::API::Type \n" if
> Win32::API::Type->is_known('DWORD');
> print "TYPE LPTSTR is known to Win32::API::Type \n" if
> Win32::API::Type->is_known('LPTSTR');
>
> my $GetTempPathRetVal = Win32::API->Import('kernel32','DWORD
GetTempPath(
> DWORD nBufferLength, LPTSTR lpBuffer )');
> if($GetTempPathRetVal eq 0) {
> die "Can't import API GetTempPath : $^E\n";
> }
>
>
> my $lpBuffer = '-'x80;
> my $returnval = GetTempPath(79,$lpBuffer);
> my $TempPath = substr($lpBuffer,0,$returnval);
>
> print "Temp path is : $TempPath !!\n";
This problem was recently discussed. Please check the archives. The fix is
# around 158 in Win32::API::Type.pm if you comment these three lines out,
# it should work:
# if($is_pointer and $packing eq 'c') {
# $packing = "p";
# }
This now works:
use strict;
use warnings;
use Win32::API;
Win32::API->Import('kernel32',
'DWORD GetTempPathA(DWORD ccBuffer, LPSTR lpszBuffer)') or
die "Import GetTempPathA: $^E";
my $lpszBuffer = pack 'Z*', ' ' x 80;
my $ret = GetTempPathA (80, $lpszBuffer);
printf "ret='%s'; lpszBuffer='%s'\n", $ret, substr $lpszBuffer, 0, $ret;
__END__
_______________________________________________
Perl-Win32-Users mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs