Sun May 20 10:04:43 2012: Request 36186 was acted upon.
Transaction: Correspondence added by bulk88.
Queue: Win32-API
Subject: Win32_API-0.55 can't handle doubles
Broken in: 0.55
Severity: Important
Owner: COSIMO
Requestors: [email protected]
Status: open
Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=36186 >
On Mon May 26 07:53:40 2008, SISYPHUS wrote:
> This is using Win32-API-0.55, Visual Studio 7.0, and perl 5.10.0 (built
> from source using the same Visual Studio 7.0 compiler)
>
> --- mydll.h ----
> __declspec(dllexport) int my_int(int);
>
> __declspec(dllexport) double my_double(int);
>
> ----------------
>
> --- mydll.c ----
> #include "mydll.h"
>
> __declspec(dllexport) int my_int(int x) {
> return x / 7;
> }
>
> __declspec(dllexport) double my_double(int x) {
> return (double) x / 7;
> }
>
> ----------------
>
> Build the dll:
>
> ----------------
> C:\_32\c>cl /LD mydll.c
> Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for
> 80x86
> Copyright (C) Microsoft Corporation 1984-2001. All rights reserved.
>
> mydll.c
> Microsoft (R) Incremental Linker Version 7.00.9466
> Copyright (C) Microsoft Corporation. All rights reserved.
>
> /out:mydll.dll
> /dll
> /implib:mydll.lib
> mydll.obj
> Creating library mydll.lib and object mydll.exp
>
> C:\_32\c>
> ----------------
>
> The perl script that attempts to access mydll.dll using Win32-API-0.55:
>
> --- mydll.pl ---
> use Win32::API;
> use warnings;
>
> $func1 = new Win32::API('mydll', 'my_int', 'N', 'N', '_cdecl');
> $val = $func1->Call(123);
>
> print "Val1: $val\n";
>
> $func2 = new Win32::API('mydll', 'my_double', 'N', 'D', '_cdecl');
> $val = $func2->Call(123);
>
> print "Val2: $val\n";
>
> ----------------
>
> Run mydll.pl:
>
> ----------------
> C:\_32\c>perl mydll.pl
> Val1: 17
> Use of uninitialized value $val in concatenation (.) or string at
> mydll.pl line 12.
> Val2:
>
> C:\_32\c>
> ----------------
>
> Clearly the reported value for $val1 is correct, but not for $val2.
>
> Cheers,
> Rob
I can't reproduce this on Win32::API 0.68. I guess its been fixed by now.