# from Joe Landman
# on Monday 21 August 2006 10:36 am:
>$x = solve_for (@f,@k);
Firstly, that is going to pass a flat list:
4.0, 3.0, 2.0 0.1, 0.2, 0.0, 0.0, 0.2, 0.3, 1.0, 1.0, 1.0
(Aside: unless you set a prototype of two array refs, but don't do
that.)
But there is another problem: the error you are seeing is because
Inline doesn't grok this function signature.
>double *solve_for(double* f, double* k) {
What you probably want is to pass [EMAIL PROTECTED], and [EMAIL PROTECTED]
But, that means you'll
need to change the signature to get a pair of SV*'s and you'll then
need to unpack them.
You also cannot return a pointer.
Here's a basic example of using array references. There's more in the
Inline::C-Cookbook.
#!/usr/bin/perl
use Inline C;
@inputArray = ( "134.3", "2.224", "3.343");
array_pass([EMAIL PROTECTED]);
__END__
__C__
int array_pass (SV* array_ref) {
AV *av_ptr;
int n;
if ( !SvROK(array_ref) || SvTYPE(SvRV(array_ref)) != SVt_PVAV )
croak("Argument must be array reference");
av_ptr = (AV*) SvRV(array_ref);
printf("Number of elements: %d\n", 1+av_len(av_ptr));
}
--Eric
--
"...the bourgeoisie were hated from both ends: by the proles, because
they had all the money, and by the intelligentsia, because of their
tendency to spend it on lawn ornaments."
--Neal Stephenson
---------------------------------------------------
http://scratchcomputing.com
---------------------------------------------------