http://www.perlmonks.org?node_id=551569

madtoperl has asked for the wisdom of the Perl Monks concerning the following question:

Hi Monks!!

I am using the Win32::API module to call a Dynamic Link Library(DLL)
named "chkValues.dll"). My DLL has a function in it called
adnValues: extern "C" __declspec(dllexport) double adnValues(double x, double y) { double z; z = x + y; cout << x << " " << y << " " << z << endl; return(z); }
My perl script to call this looks like:
use Win32::API; $fld1 = $ARGV[0]; $fld2 = $ARGV[1]; $myFunc = Win32::API->new('adnValues', 'double adnValues(double x, double y)'); $outval = $myFunc->Call($fld1, $fld2); print "$outval";
When i am executing this, perl script exits at the Call line, giving me the "Perl
Command Line Interpreter has encountered a problem and needs to close.
We are sorry for the inconvenience" message.
I Noticed that if I change my dll function to take no arguments (hard coding
x and y within the function) and return a double, I have no issues,
e.g. $myFunc = Win32::API->new('adnValues', 'double adnValues()'); $outval = $myFunc->Call();
I also tried the alternative syntax:
$myFunc = Win32::API->new('adnalues', 'adnValues', 'DD', 'D')
with no success. I'm strucking here pls help me monks ...

2006-10-07 Unapproved by planetscape once evidence of habitual plagiarism uncovered.