We must note that the length of the list is not type int but type long.
-------------------------------------------------------------------------
addList.c
-------------------------------------------------------------------------
#include "mathlink.h" extern double addList( double *list, long n); double addList( double *list, long n) { int i; double sum=0; for(i=0;i<n;i++) sum = sum + list[i]; return sum; } #if WINDOWS_MATHLINK #if __BORLANDC__ #pragma argsused #endif int PASCAL WinMain( HINSTANCE hinstCurrent, HINSTANCE hinstPrevious, LPSTR lpszCmdLine, int nCmdShow) { char buff[512]; char FAR * buff_start = buff; char FAR * argv[32]; char FAR * FAR * argv_end = argv + 32; hinstPrevious = hinstPrevious; /* suppress warning */ if( !MLInitializeIcon( hinstCurrent, nCmdShow)) return 1; MLScanString( argv, &argv_end, &lpszCmdLine, &buff_start); return MLMain( (int)(argv_end - argv), argv); } #else int main(int argc, char* argv[]) { return MLMain(argc, argv); } #endif
---------------------------------------------------------------------
addList.tm
---------------------------------------------------------------------
:Begin: :Function: addList :Pattern: addList[ L_List] :Arguments: { L } :ArgumentTypes: { RealList } :ReturnType: Real :End: :Evaluate: addList::usage = "addList[x] gives the sum of the elements of the list x"
---------------------------------------------------------------------
Makefile
---------------------------------------------------------------------
MPREP = /usr/bin/mprep CXX = /usr/bin/c++ BINARIES = addList all : $(BINARIES) addList : addListtm.c addList.c ${CXX} addList.c addListtm.c -lML64i3 -lm -lpthread -lrt -lstdc++ -o $@ addListtm.c : addList.tm ${MPREP} addList.tm -o addListtm.c
-------------------------------------------
addList.nb
-------------------------------------------
link = Install["./addList"]
addList[{1, 5, 6}]
No comments:
Post a Comment