@@ -9,7 +9,7 @@ use strict;
9
9
use Config;
10
10
use Test::More;
11
11
use Math::Int64 qw( int64 hex_to_uint64 uint64_to_hex) ;
12
- plan tests => 21 ;
12
+ plan tests => 20 ;
13
13
use vars qw(
14
14
$function
15
15
$result
@@ -18,11 +18,11 @@ use vars qw(
18
18
) ;
19
19
20
20
BEGIN {
21
- eval " sub PTR_SIZE () { " .length (pack (' J ' ,0))." }" ;
21
+ eval " sub PTR_SIZE () { " .length (pack (( $] <= 5.007002 ? ' L ' : ' J ' ) ,0))." }" ;
22
22
}
23
23
use_ok(' Win32::API' );
24
24
use_ok(' Win32::API::Callback' );
25
- use_ok( ' Win32::API::Test' ) ;
25
+ use Win32::API::Test;
26
26
27
27
28
28
ok(1, ' loaded' );
@@ -46,21 +46,6 @@ diag('Compiler version:', $cc_vers);
46
46
' N' ,
47
47
' N'
48
48
);
49
- # make the the ActiveState distropref patch succeed
50
- =pod
51
- }
52
-
53
- SKIP: {
54
-
55
- skip('because callbacks currently /SEGFAULT/ all compilers but MSVC 6+', 1)
56
- unless $cc_name eq 'cl' && $cc_vers >= 12;
57
-
58
- $result = $function->Call( $callback, 21 );
59
- is($result, 42, 'callback function works');
60
- }
61
-
62
- #
63
- =cut
64
49
ok($callback , ' callback function defined' );
65
50
66
51
$function = new Win32::API($test_dll , ' do_callback' , ' KI' , ' I' );
@@ -80,16 +65,16 @@ $callback = Win32::API::Callback->new(
80
65
$chr = $_ [0] & 0xFF; # x64 fill high bits with garbage
81
66
die " bad char" if chr ($chr ) ne ' P' ;
82
67
if (PTR_SIZE == 4){
83
- my ($low ,$high ) = unpack (' JJ ' , $_ [1]);
68
+ my ($low ,$high ) = unpack (IV_LET.IV_LET , $_ [1]);
84
69
die " bad unsigned int64" if $low != 0xABCDEF12;
85
70
die " bad unsigned int64" if $high != 0x12345678;
86
71
}else {
87
72
print " 0x" .unpack (' H[16]' , $_ [1])." \n " ;
88
73
no warnings ' portable' , ' overflow' ; # silence on 32 bits
89
74
die " bad unsigned int64" if $_ [1] != eval " 0x12345678ABCDEF12" ;
90
75
}
91
- my $f4char = unpack (' P[4] ' ,pack (' J ' ,$_ [2]));
92
- die " bad 4 char struct" if $f4char ne " JAPH" ;
76
+ my $f4char = unpack (' P4 ' ,pack (IV_LET ,$_ [2]));
77
+ die " bad 4 char struct \" $f4char \" " if $f4char ne " JAPH" ;
93
78
die " bad float" if $_ [3] != 2.5;
94
79
die " bad double" if $_ [4] != 3.5;
95
80
return 70000;
@@ -117,7 +102,7 @@ SKIP: {
117
102
$chr = $_ [0] & 0xFF; # x64 fill high bits with garbage
118
103
die " bad char" if chr ($chr ) ne ' P' ;
119
104
die " bad unsigned int64" if $_ [1] != hex_to_uint64(" 0x12345678ABCDEF12" );
120
- my $f4char = unpack (' P[4] ' ,pack (' J ' ,$_ [2]));
105
+ my $f4char = unpack (' P4 ' ,pack (IV_LET ,$_ [2]));
121
106
die " bad 4 char struct" if $f4char ne " JAPH" ;
122
107
die " bad float" if $_ [3] != 2.5;
123
108
die " bad double" if $_ [4] != 3.5;
@@ -172,15 +157,15 @@ $callback = Win32::API::Callback->new(
172
157
$chr = $_ [0] & 0xFF;
173
158
die " bad char" if chr ($chr ) ne ' P' ;
174
159
if (PTR_SIZE == 4){
175
- my ($low ,$high ) = unpack (' JJ ' , $_ [1]);
160
+ my ($low ,$high ) = unpack (IV_LET.IV_LET , $_ [1]);
176
161
die " bad unsigned int64" if $low != 0xABCDEF12;
177
162
die " bad unsigned int64" if $high != 0x12345678;
178
163
}else {
179
164
no warnings ' portable' , ' overflow' ; # silence on 32 bits
180
165
die " bad unsigned int64" if $_ [1] != 0x12345678ABCDEF12;
181
166
}
182
167
my $f4char ;
183
- $f4char = unpack (' P[4] ' ,pack (' J ' ,$_ [2]));
168
+ $f4char = unpack (' P4 ' ,pack (IV_LET ,$_ [2]));
184
169
die " bad 4 char struct" if $f4char ne " JAPH" ;
185
170
die " bad float" if $_ [3] != 2.5;
186
171
die " bad double" if $_ [4] != 3.5;
@@ -232,7 +217,7 @@ $callback = Win32::API::Callback->new(
232
217
# print Dumper(\@_);
233
218
ok(@_ == 0, " @_ should be empty" );
234
219
if (PTR_SIZE == 4){
235
- return pack (' JJ ' , 0x30004000, 0x80002000);
220
+ return pack (IV_LET.IV_LET , 0x30004000, 0x80002000);
236
221
}
237
222
else {
238
223
no warnings ' portable' , ' overflow' ; # silence on 32 bits
@@ -248,7 +233,7 @@ $result = $function->Call($callback);
248
233
{
249
234
no warnings ' portable' , ' overflow' ; # silence on 32 bits
250
235
is($result ,
251
- PTR_SIZE == 4 ? pack (' JJ ' , 0x30004000, 0x80002000) : 0x8000200030004000
236
+ PTR_SIZE == 4 ? pack (IV_LET.IV_LET , 0x30004000, 0x80002000) : 0x8000200030004000
252
237
, " do_callback_void_q was successful" );
253
238
}
254
239
#
0 commit comments