Re: Mathlink: How do I pass arbitrary data from Mathematica to C?
- To: mathgroup at smc.vnet.net
- Subject: [mg86883] Re: Mathlink: How do I pass arbitrary data from Mathematica to C?
- From: ragfield <ragfield at gmail.com>
- Date: Tue, 25 Mar 2008 01:15:37 -0500 (EST)
- References: <fs4rmb$p3s$1@smc.vnet.net>
On Mar 23, 1:00 am, Karen Bindash <KarenBind... at googlemail.com> wrote:
> Does that make sense? Any ideas how to pass arbitrary data to a C
> program?
You won't be able to do this directly. You will have to write your
own C function that converts the data from a Mathematica type to the
raw data your function is expecting. This is not very difficult. Try
something like this (not tested):
/* MyFile.tm */
:Begin:
:Function: myFunc
:Pattern: MyFunc[reals:(_Real...)]
:Arguments: { reals }
:ArgumentTypes: Manual
:ReturnType: Manual
:End:
/* library function to call */
extern int g(const double* theData, int theLength);
void myFunc(void)
{
double* theData;
int* theDims;
char** theHeads;
int theDepth;
if(MLGetReal64Array(stdlink, &theData, theDims, &theHeads,
&theDepth))
{
int theLength = theDims[0], i, theResult;
for(i = 1; i < theDepth; i++)
theLength *= theDims[i];
theResult = g(theData, theLength);
MLReleaseReal64Array(stdlink, theData, theDims, theHeads, theDepth);
MLPutInteger(stdlink, theResult);
}
else
MLPutSymbol(stdlink, "$Failed");
}