Fri Jan 22 06:26:39 2010: Request 53914 was acted upon.
Transaction: Ticket created by perls...@mail.bg
       Queue: Win32-API
     Subject: Bug report for Win32::API::Callback
   Broken in: (no value)
    Severity: (no value)
       Owner: Nobody
  Requestors: perls...@mail.bg
      Status: new
 Ticket <URL: http://rt.cpan.org/Ticket/Display.html?id=53914 >


Hello,

The code below generate exception and application dies with the  
following "Error signature"

AppName: perl.exe     AppVer: 5.10.0.1004     ModName: perl510.dll
ModVer: 5.10.0.1004     Offset: 000961d5

# --- code start ---

#!/usr/bin/perl
use strict;
use Win32::API;
use Win32::API::Callback;

Win32::API->Import('kernel32', 'SetConsoleCtrlHandler', 'KL', 'L');
Win32::API->Import('kernel32', 'GenerateConsoleCtrlEvent', 'LL', 'L');
Win32::API->Import('kernel32', 'GetLastError', '', 'L');

sub cb {
     my ($dwCtrlType) = @_;

     open (FILE, '>c:/QUIT.TXT');
     print FILE "RECEIVED SIGNAL: $dwCtrlType\n";
     close FILE;

     return 0;
}

my $callback = Win32::API::Callback->new(\&cb, "L", "L");

SetConsoleCtrlHandler($callback, 1)  or die "Error: " . GetLastError() . "\n";

sleep(1);
GenerateConsoleCtrlEvent(0, 0);
sleep(2);

# --- code end ---

The error occurs when cb() routine is called, no matter whether it is  
triggered through GenerateConsoleCtrlEvent call or via while(1){} and  
Ctrl+C. Also specific implementation of cb() routine doesn't matter,  
i.e. callback body can be just return 0 or return 1 - same effect (in  
my implementation no file is created, so I assume that exception is  
generated when OS try to call the callback). My personal opinion is  
that $callback handler is not properly implemented.

My test fails both with Win32-API version 0.55 and 0.58 (ActiveState build).
I'm using Windows XP Professional, SP3 (up-to-date installation).

Regards,
Julian


-------------------------------------

Хостинг от 3.60 лв/м| Домейни от 17.46 лв/с ДДС| Сървъри, VPS от 48.00  
лв/м с ДДС!
18 GB място, Неограничен трафик, Безплатен домейн – 6.90 лв./м с ДДС!
25 GB място, 1200 GB трафик, Безплатен домейн – 11.46 лв./м с ДДС!


Reply via email to