MLPutRawData (C Function)

MLPutRawData has been replaced by WSPutRawData.

int MLPutRawData(MLINK link, const unsigned char *d, int l)

puts raw character data or numeric data from d of length l bytes to link.

Details

  • Use MLPutRawData() in conjunction with MLPutType() and MLPutRawSize() to manually put data to a link rather than using the type-specific API functions such as MLPutInteger32() or MLPutUTF8String().
  • Sending numerical data with MLPutRawData() bypasses the MathLink library's internal mechanisms for ensuring data compatibility between heterogenous computer systems. To use this function, users will need to account for endianness and C-type size differences between computer systems.
  • When sending character data use MLPutType() with the token argument MLTKOLDSTR for string data or MLTKOLDSYM for symbol data. Do not use MLPutRawData() to send character data in any format other than 7-bit ASCII encoding.
  • When sending numerical data use MLPutType() with the correct token for the binary data. The MathLink header file mathlink.h contains the complete list of these tokens, but the more common tokens are listed here for convenience:
  • unsigned charMLTK_CUCHAR
    shortMLTK_CSHORT
    intMLTK_CINT
    longMLTK_CLONG
    floatMLTK_CFLOAT
    doubleMLTK_CDOUBLE
    long doubleMLTK_CLONGDOUBLE
  • MLPutRawData() returns a 0 in the event of an error and a nonzero value if the function succeeds.
  • Use MLError() to retrieve the error code if MLPutRawData() fails.
  • MLPutRawData() is declared in the MathLink header file mathlink.h.

Examples

Basic Examples  (1)

#include "mathlink.h"

/* send a function as raw data to a link */

void f(MLINK lp)
{
    int a = 2, b = 3;

    if(! MLPutType(lp, MLTKFUNC))
        { return; /* unable to put the function type to lp */ }

    if(! MLPutArgCount(lp, 2))
        { return; /* unable to put the number of arguments to lp */ }

    if(! MLPutType(lp, MLTKOLDSYM))
        { return; /* unable to put function head type to lp */ }
    
    if(! MLPutRawSize(lp, 4))
        { return; /* unable to put the size of the symbol to lp */ }

    if(! MLPutRawData(lp, (const unsigned char *)"Plus", 4))
        { return; /* unable to put the raw bytes to lp */ }

    if(! MLPutType(lp, MLTK_CINT))
        { return; /* unable to put the argument type to lp */ }

    if(! MLPutRawSize(lp, sizeof(int)))
        { return; /* unable to put the size of the integer to lp */ }

    if(! MLPutRawData(lp, (const unsigned char *)&a, sizeof(a)))
        { return; /* unable to put the raw bytes of a to lp */ }

    if(! MLPutType(lp, MLTK_CINT))
        { return; /* unable to put the second argument type to lp */ }

    if(! MLPutRawSize(lp, sizeof(int)))
        { return; /* unable to put the size of the integer to lp */ }

    if(! MLPutRawData(lp, (const unsigned char *)&b, sizeof(b)))
        { return; /* unable to put the raw bytes of b to lp */ }
}