Re: Mathlink problem with lists of reals
- To: mathgroup@smc.vnet.net
- Subject: [mg11177] Re: Mathlink problem with lists of reals
- From: kevinl@wolfram.com (Kevin Leuthold)
- Date: Wed, 25 Feb 1998 03:31:48 -0500
- Organization: Wolfram Research, Inc.
- References: <6ctk8a$lvb@smc.vnet.net>
Dave,
The reason WriteSample is returning is because of what you have in your
:Pattern: field in your template file. The :Pattern: field specifies
the pattern matching that your Mathematica function will do, and the patterns
here should match the Heads of the expressions your function expects. So you
should change your :Pattern: field to:
:Pattern: WriteSample[filename_String, ns_List]
(See the Mathematica Book (Third Edition), section 2.12.4 for an example
of sending a List to a template-based MathLink program). Also, to see
what patterns are defined for your installed program, you can use the
LinkPatterns function.
Kevin Leuthold
MathLink Group
Wolfram Research
Dave Grosvenor <dag@hplb.hpl.hp.com> writes:
>Briefly
>--------
>Has anyone else had a problem passing a list of Reals from mathematica
>to a c program?
>Or am I making a real simple mistake?
>I would be grateful for examples which do something similar.
>Thanks
> Dave Grosvenor
>In detail
>----------
>I have got mathlink to pass lists of reals from c to mathematica. But
>now I want to write the reals to a specified file. This is so simple
>I cannot beleive it is not working.
>I define the following template
>:Begin:
>:Function: writesample
>:Pattern: WriteSample[filename_String, ns_RealList]
>:Arguments: {filename, ns}
>:ArgumentTypes: {String, RealList}
>:ReturnType: Integer
>:End:
>This is called as follows:-
>WriteSample["test.txt",{1.1,2.2}]
>evaluating to
>WriteSample["test.txt",{1.1,2.2}]
>The call never reaches my c function code, which is defined as follows:-
>int main(int argc,char* argv[])
>{
>int result;
>result = MLMain(argc,argv);
>return result;
>}
>int writesample(char* filename,double px[],long nx) {
>FILE* outp = fopen(filename,"wb");
>long i;
>for (i=0;i<nx;i++){
> fprintf(outp,"%e\n",px[i]);
>}
>fclose(outp);
>}
>I have put in assert(1!=1) at various points in the writesampletm.c file
>which was generated from the template, and it seems to fail much
>earlier...