Yes, this looks better to me too.  For whatever my opinion is worth.


On approximately 11/21/2003 10:31 AM, came the following characters from
the keyboard of Laurent ROCHER:

For "A" problem, i don't think it's a else problem.

You can call PeekMessage without a message parameter.
In this case message == &PL_sv_undef, and no warming it's necessary.

If you specify a message parameter, then we need a reference (SvROK) and
must be a Array reference.
I think it's better to move SvROK(message) in inner if, like this :

BOOL
PeekMessage(handle, min=0, max=0, message=&PL_sv_undef)
    HWND handle
    UINT min
    UINT max
    SV* message
PREINIT:
    MSG msg;
CODE:
    ZeroMemory(&msg, sizeof(msg));
    RETVAL = PeekMessage(&msg, handle, min, max, PM_NOREMOVE);
    if(message != &PL_sv_undef) {
        if(SvROK(message) && SvTYPE(SvRV(message)) == SVt_PVAV) {
            av_clear((AV*) SvRV(message));
            av_push((AV*) SvRV(message), newSViv((long) msg.hwnd));
            av_push((AV*) SvRV(message), newSViv(msg.message));
            av_push((AV*) SvRV(message), newSViv(msg.wParam));
            av_push((AV*) SvRV(message), newSViv(msg.lParam));
            av_push((AV*) SvRV(message), newSViv(msg.time));
            av_push((AV*) SvRV(message), newSViv(msg.pt.x));
            av_push((AV*) SvRV(message), newSViv(msg.pt.y));
        } else {
            if(PL_dowarn) warn("Win32::GUI: fourth parameter to PeekMessage
is not an array reference");
        }
    }
OUTPUT:
    RETVAL

Laurent.

----- Original Message ----- From: "Steve Pick" <[EMAIL PROTECTED]>
To: "Win32 GUI Hackers" <perl-win32-gui-hackers@lists.sourceforge.net>
Sent: Friday, November 21, 2003 2:50 AM
Subject: [perl-win32-gui-hackers] Fix for PeekMessage



You'll notice PeekMessage A) doesnt warn about non-references even though
the warning code is there and B) Yields a ton of "attempt to free
unreferenced scalar" errors. The problem was an else{} in the wrong place,
and making array values mortal so they got cleaned up before they ever hit
your perl program, so here's it fixed.



###########################################################################

   # (@)METHOD:PeekMessage([MIN, MAX, MESSAGE])
   # Inspects the window's message queue and eventually returns data
   # about the message it contains; it can optionally check only for
message
   # identifiers in the range MIN..MAX; the last MESSAGE parameter, if
   # specified, must be an array reference.
   # If a message is found, the function puts in that array 7 elements
   # containing:
   #   - the handle of the window to which the message is addressed
   #   - the message identifier
   #   - the wParam argument
   #   - the lParam argument
   #   - the time when message occurs
   #   - the x coordinate at which message occurs
   #   - the y coordinate at which message occurs
   #
BOOL
PeekMessage(handle, min=0, max=0, message=&PL_sv_undef)
   HWND handle
   UINT min
   UINT max
   SV* message
PREINIT:
   MSG msg;
CODE:
   ZeroMemory(&msg, sizeof(msg));
   RETVAL = PeekMessage(&msg, handle, min, max, PM_NOREMOVE);
    if(message != &PL_sv_undef && SvROK(message)) {
       if(SvTYPE(SvRV(message)) == SVt_PVAV) {
           av_clear((AV*) SvRV(message));
           av_push((AV*) SvRV(message), newSViv((long) msg.hwnd));
           av_push((AV*) SvRV(message), newSViv(msg.message));
           av_push((AV*) SvRV(message), newSViv(msg.wParam));
           av_push((AV*) SvRV(message), newSViv(msg.lParam));
           av_push((AV*) SvRV(message), newSViv(msg.time));
           av_push((AV*) SvRV(message), newSViv(msg.pt.x));
           av_push((AV*) SvRV(message), newSViv(msg.pt.y));
       }
   }
   else {
      if(PL_dowarn) warn("Win32::GUI: fourth parameter to PeekMessage is
not an array reference");
   }
OUTPUT:
   RETVAL




-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
Perl-Win32-GUI-Hackers mailing list
Perl-Win32-GUI-Hackers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/perl-win32-gui-hackers



--
Glenn -- http://nevcal.com/
===========================
Like almost everyone, I receive a lot of spam every day, much of it
offering to help me get out of debt or get rich quick.  It's ridiculous.
-- Bill Gates

And here is why it is ridiculous:
The division that includes Windows posted an operating profit of $2.26 billion on revenue of $2.81 billion. --from Reuters via http://biz.yahoo.com/rc/031113/tech_microsoft_msn_1.html

So that's profit of over 400% of investment... with a bit more investment in Windows technology, particularly in the area of reliability, the profit percentage might go down, but so might the bugs and security problems? Seems like it would be a reasonable tradeoff. WalMart earnings are 3.4% of investment.


Reply via email to