Mon Nov 25 11:09:30 2013: Request 90597 was acted upon. Transaction: Correspondence added by BULKDD Queue: Win32-API Subject: module Win::API (0.75) installation failed Broken in: (no value) Severity: (no value) Owner: Nobody Requestors: eduard1...@gmail.com Status: open Ticket <URL: https://rt.cpan.org/Ticket/Display.html?id=90597 >
On Mon Nov 25 04:29:47 2013, eduard1...@gmail.com wrote: > I downloaded the updated version of the the Win32::Api module. All > tests > are passed. But I faced other problem. This fragment of the perl code > does > not work now: > > *$jtagConnect = new Win32::API('jtagvsdll', 'jtagConnect','I', 'I', > '_cdecl');* > *$jtagDisConnect = new Win32::API('jtagvsdll', 'jtagDisConnect','', > 'V');#, > '_cdecl'* > *$JtagReadMem = new Win32::API('jtagvsdll', 'JtagReadMem','NNP','I', > '_cdecl');* > *$JtagWriteMem = new Win32::API('jtagvsdll', 'JtagWriteMem','NNP','I', > '_cdecl');* > *$JtagWriteReg = new Win32::API('jtagvsdll', 'JtagWriteReg','NN','I', > '_cdecl' );* > *$JtagReadReg = new Win32::API('jtagvsdll', 'JtagReadReg','N','N', > '_cdecl' > );* > *$JtagRun = new Win32::API('jtagvsdll', 'JtagRun', '', '', '_cdecl' > );* > *$JtagStep = new Win32::API('jtagvsdll', 'JtagStep', '', '', '_cdecl' > );* > > But it works perfect in the Cygwin 32-bit environment , with your > module > (releases 72,73,74,75). What are the C prototypes from headers of those functions? What are precise symptoms of "does not work"? new() returns undef? Crash? C function returns failure value (false or non-zero error code)? Common mistakes are, loading 32 bit DLL into 64 bit process (forbidden by windows), improper pack()ing of structs or machine values for 'P' letter, 'I' (32 bit always) instead of 'N' (32 or 64 bit, AKA pointer size), 'N' instead of 'I' (high 32 bits are not zero). _cdecl has no effect on 64 bit os, because 64 bit Windows has 1 calling convention. Visual C treats all the different 32 bit calling convention as the 1 and only 64 bit calling convention.