in reply to Pesky warnings after calling Win32 API

I don't know about the other members -- check the docs for GlobalMemoryStatus -- but dwLength must be initialized before GlobalMemoryStatus is called. I don't know if that'll help at all with the immediate problem, but I'm sure it's something you must do.

The problem occures in Win32::API::Struct's getPack, in the line if($Win32::API::Type::PackSize{$type} < $align) {. I presume getPack prepares the perl structure into a C structure so that it can be passed to GlobalMemoryStatus.

Update: After much digging in the sources, I found that you must call $MEMORYSTATUS->align('auto'). The following quote from the Win32::API::Struct pod is an understatement:

But if you define your own structure, you may need to give it an explicit alignment. In most cases, passing a SIZE of 'auto' should keep the world happy.

Replies are listed 'Best First'.
Re^2: Pesky warnings after calling Win32 API
by Biff (Acolyte) on Sep 18, 2004 at 15:07 UTC
    Thanks ikegami but that didn't fix the problem. I'm really freaked out by this cause I'm convinced that I'm doing something wrong but can't figure it out. Anyway, right now I'm just going to hide the warnings and get on with life. I hate doing this but I don't have much choice.

    Thanks for replying.

      So I decided to download Win32::API and run your code. My fix does indeed remove the warning at the line you mentioned. However, there are apparently more warnings, which are removed by the following:
      my $MEMORYSTATUS = Win32::API::Struct->new('MEMORYSTATUS'); { # Avoid warning at Struct.pm line 214 $MEMORYSTATUS->align('auto'); } { # Avoid all other warnings in Struct.pm $MEMORYSTATUS->{'dwLength' } = 0; $MEMORYSTATUS->{'MemLoad' } = 0; $MEMORYSTATUS->{'TotalPhys' } = 0; $MEMORYSTATUS->{'AvailPhys' } = 0; $MEMORYSTATUS->{'TotalPage' } = 0; $MEMORYSTATUS->{'AvailPage' } = 0; $MEMORYSTATUS->{'TotalVirtual'} = 0; $MEMORYSTATUS->{'AvailVirtual'} = 0; }

      I'd like to correct myself regarding dwLength. The docs say Windows will set it for you. Very odd.

        WICKED COOL!! You sir are a steely-eyed missle man!

        (or woman <sheepish grin> can't tell from your handle :-)

        Either way ikegami, I am much in your debt.

        Would you say that this is a bug in Struct.pm? Or at least a needed addition to the documentation?

        ...by the way did I say thanks? :-)