Il mio progetto si mette male!

Ho provato queto codice che dovrebbe riportarmi il numero di WaveIn Device installate sul sistema e delle informazione su di esse:

codice:
#!/perl

use strict;
use warnings;
use Win32::API;
use Win32::API::Struct;

use Data::Dumper;

Win32::API::Struct->typedef( "WAVEINCAPS", qw{
	INT ManufacturerID; 
	INT ProductID; 
	LONG DriverVersion; 
	TCHAR ProductName[32]; 
	LONG Formats; 
	INT Channels; 
	INT Reserved;
} ) or die "Typedef error $!\n"; 

#Win32::API->Import( winmm => q{LRESULT waveInGetNumDevs()} );
Win32::API->Import("winmm", "int waveInGetNumDevs()");
Win32::API->Import( winmm => q{LRESULT waveInGetDevCaps(UINT_PTR DeviceID, LPWAVEINCAPS pwic, UINT cbwic)} );

my $devices = waveInGetNumDevs();
my $caps = Win32::API::Struct->new("WAVEINCAPS"); # Dim Caps As WaveInCaps

print "Devices: $devices\n\n";

my $result;

for (0 .. ($devices - 1) ) {
	$result = waveInGetDevCaps($_, $caps, Win32::API::Struct->sizeof('WAVEINCAPS'));
}

print Dumper $caps;
Funziona solo: my $devices = waveInGetNumDevs();

ma print Dumper $caps; restituisce tutte variabili null

che fare?