MathGroup Archive 2000

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: MathLink MLGetRealArray

  • To: mathgroup at smc.vnet.net
  • Subject: [mg21974] Re: MathLink MLGetRealArray
  • From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
  • Date: Mon, 7 Feb 2000 13:02:27 -0500 (EST)
  • Organization: Universitaet Leipzig
  • References: <87iph4$3vb@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

Hi Johannes,

a) look at the decalaration of MLGetRealArray(), x is a pointer to a
pointer to double
   and *not* as you use in your example a pointer to a pointer to a
pointer to double.
b) you must read the values in your C program exactly as you pass them
from Mathematica.
   I append the source that compile/and run fine on Unix and on my
Windows box.
   so you have to read the y list first, than the x-Matrix and than the
kernelWidth 
c) I have several MathLink programs but I have never used
MLGetRealArray(). Since you can't
   allocate a 2d array in C dynamical you must pass a 1d array and use
the index calculation
   as usual. So, it is not very usefull to pass a multi-dimensional
array. I personal 
   pass the matrix dimensions typical in separate arguments and use a
Flatten[] array.
   For the way back Matrix-> Mathematica I typical pass a 1d array with
some Partition[] calls
   arround.
d) seven nice MathLink programs, explained and with help full packages
are just a
   book store away from you, don't delay order
   "Mathematica und C in der modernen Theoretischen Physik" von
Jens-Peer Kuska
   ISBN3-540-61489-3, Springer 1997
   the programs do allmost everything that on can do with MathLink,
calls to Mathematica
   passing arrays (compex and real ones) solving ordinary differential
equations with
   MathLink ... it is soo nice
c) You can look to my MathGL3d source code, it has total 19000 lines of
C/MathLink and Mathematica
   code with allmost every dirty trick


Hope that helps
  Jens

Johannes Ludsteck wrote:
> 
> Dear Group Members,
> I am trying to get a matrix from Mathematica into a c program via
> MathLink. When I compile the code below (with Borland C++ 5.0), I
> get an Warning message Suspicious pointer conversion in line...,
> which relates to depthx. However, the variable depthx works fine.
> 
> The problem is with the array x. If I try to access the elements in x,
> for example
> temp = x[0][0]; temp = temp * temp;
> 
> then the program crashes.
> Any suggestions. It would help me too if someone could provide  C
> program, written in connection with mathlink.
> 
> Thank you,
>         Johannes Ludsteck
--------------FC4D6D82E3605F9D6EFFE3D5
 filename="test.tm"

#include <windows.h>
#include "mathlink.h"

void kerndens(void)
{  double *y,kernelWidth;
   long n;
   double *x, temp;
   long *dimsx, depthx;
   char **headsx;

   MLGetRealList(stdlink,&y,&n);
   MLGetRealArray(stdlink, &x, &dimsx, &headsx, &depthx);
   MLGetReal(stdlink,&kernelWidth);

   MLPutReal(stdlink, x[0]);

   MLDisownRealList(stdlink,y,n);
   MLDisownRealArray(stdlink, x, dimsx, headsx, depthx);
}

#ifdef __WIN32__

int WINAPI WinMain(
    HINSTANCE hInstance, HINSTANCE hPrevInstance,
    LPSTR lpCmdLine, int nShowCmd)  {
    char buff[512];
    char FAR *buff_start=buff;
    char FAR *argv[32];
    char FAR * FAR * argv_end=argv+32;

    if(!MLInitializeIcon(hInstance,nShowCmd)) return 1;
    MLScanString(argv,&argv_end,&lpCmdLine,&buff_start);
    return MLMain(argv_end-argv,argv);
  }


#else

int main(int argc, char *argv[]) {
  return MLMain(argc,argv);
 }

#endif

:Begin:
:Function:	 	kerndens
:Pattern:		kerndens[y_List,x_?MatrixQ,kernelWidth_Real]
:Arguments:		{y,x,kernelWidth}
:ArgumentTypes:		{Manual}
:ReturnType:		Manual
:End:





  • Prev by Date: Re: Cellular Automaton in Mathematica and OOP
  • Next by Date: Re: Importing Illustrator 8 EPS
  • Previous by thread: Re: MathLink MLGetRealArray
  • Next by thread: Re: MathLink MLGetRealArray