<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602</link>
    <title>MATLAB Central Newsreader - Pass structure to MATLAB</title>
    <description>Feed for thread: Pass structure to MATLAB</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2008 by The MathWorks, Inc.</copyright>
    <webmaster>webmaster@mathworks.com</webmaster>
    <generator>MATLAB Central Newsreader</generator>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <ttl>60</ttl>
    <image>
      <title>The MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Thu, 01 Nov 2007 00:26:33 -0400</pubDate>
      <title>Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399298</link>
      <author>Faisal </author>
      <description>Hi I have the following structure in C++. I am reading a&lt;br&gt;
file and at the end of each loop I want to pass my structure&lt;br&gt;
to MATLAB with mex fucntion. Any help please ?&lt;br&gt;
&lt;br&gt;
struct Frame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double dist[3072];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double ampl[3072];&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
struct UShortFrame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short dist[3072];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short ampl[3072];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
void ReadFromFile(const char *filename, int ArraySize)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;unsigned read_frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UShortFrame* usframe = new UShortFrame;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifstream filein(filename, ios::in | ios::binary);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!filein) {  &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (filein.read((char*)usframe, &lt;br&gt;
sizeof(UShortFrame)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Frame* frame = new Frame;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;frame_no = usframe-&amp;gt;frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; 3072; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;dist[i] = usframe-&amp;gt;dist[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;ampl[i] = usframe-&amp;gt;ampl[i];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}    &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filein.close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete []usframe;&lt;br&gt;
	  // cout&amp;lt;&amp;lt;(*frame).dist[0]&amp;lt;&amp;lt;endl;    &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// pass frame structure to MATLAB&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;}&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 02 Nov 2007 04:35:34 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399535</link>
      <author>James Tursa</author>
      <description>On Thu, 1 Nov 2007 00:26:33 +0000 (UTC), "Faisal "&lt;br&gt;
&amp;lt;faisal_mufti.nospam@yahoo.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;Hi I have the following structure in C++. I am reading a&lt;br&gt;
&amp;gt;file and at the end of each loop I want to pass my structure&lt;br&gt;
&amp;gt;to MATLAB with mex fucntion. Any help please ?&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;struct Frame&lt;br&gt;
&amp;gt;{&lt;br&gt;
&amp;gt;     double frame_no;&lt;br&gt;
&amp;gt;     double dist[3072];&lt;br&gt;
&amp;gt;     double ampl[3072];&lt;br&gt;
&amp;gt;};&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;struct UShortFrame&lt;br&gt;
&amp;gt;{&lt;br&gt;
&amp;gt;     unsigned frame_no;&lt;br&gt;
&amp;gt;     unsigned short dist[3072];&lt;br&gt;
&amp;gt;     unsigned short ampl[3072];&lt;br&gt;
&amp;gt;      &lt;br&gt;
&amp;gt;};&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;void ReadFromFile(const char *filename, int ArraySize)&lt;br&gt;
&amp;gt;{&lt;br&gt;
&amp;gt;      &lt;br&gt;
&amp;gt;      int i;unsigned read_frame_no;&lt;br&gt;
&amp;gt;      UShortFrame* usframe = new UShortFrame;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;      ifstream filein(filename, ios::in | ios::binary);&lt;br&gt;
&amp;gt;      if(!filein) {  &lt;br&gt;
&amp;gt;            std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;gt;           if (filein.read((char*)usframe, &lt;br&gt;
&amp;gt;sizeof(UShortFrame)))&lt;br&gt;
&amp;gt;             {&lt;br&gt;
&amp;gt;               Frame* frame = new Frame;&lt;br&gt;
&amp;gt;               frame-&amp;gt;frame_no = usframe-&amp;gt;frame_no;&lt;br&gt;
&amp;gt;                for (int i = 0; i &amp;lt; 3072; ++i)&lt;br&gt;
&amp;gt;               {&lt;br&gt;
&amp;gt;                   frame-&amp;gt;dist[i] = usframe-&amp;gt;dist[i];&lt;br&gt;
&amp;gt;                   frame-&amp;gt;ampl[i] = usframe-&amp;gt;ampl[i];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;               }    &lt;br&gt;
&amp;gt;                  &lt;br&gt;
&amp;gt;             }&lt;br&gt;
&amp;gt;            filein.close();&lt;br&gt;
&amp;gt;            delete []usframe;&lt;br&gt;
&amp;gt;	  // cout&amp;lt;&amp;lt;(*frame).dist[0]&amp;lt;&amp;lt;endl;    &lt;br&gt;
&amp;gt;          // pass frame structure to MATLAB&lt;br&gt;
&amp;gt;            &lt;br&gt;
&amp;gt; }&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&lt;br&gt;
Here is a complete working mex file that puts Frame and UShortFrame&lt;br&gt;
structures into the MATLAB base workspace. mPut1 and mPut2 could&lt;br&gt;
possibly be optimized a bit, but you get the idea. There are a few&lt;br&gt;
points to note about this mex file:&lt;br&gt;
&lt;br&gt;
1) I knew for this example that the ARRAYSIZE was 3072, so I didn't&lt;br&gt;
bother to check that sizeof(double)*ARRAYSIZE and sizeof(unsigned&lt;br&gt;
short)*ARRAYSIZE did not overflow a size_t. For more robust code one&lt;br&gt;
would check this result before using it.&lt;br&gt;
&lt;br&gt;
2) I didn't bother to check the return values from&lt;br&gt;
mxCreateStructMatrix and mxCreateNumericMatrix to see that they&lt;br&gt;
completed ok because this was a mex file. For mex files, if they don't&lt;br&gt;
complete ok then they will not return at all ... MATLAB will simply&lt;br&gt;
clean up allocated memory it knows about and exit and return control&lt;br&gt;
back to MATLAB. If you use this code in an engine application then you&lt;br&gt;
*will* have to put in code to check for valid return values.&lt;br&gt;
&lt;br&gt;
3) I used the mxCalloc function to create new structure variables&lt;br&gt;
instead of using the C++ "new" operator for two reasons. First, this&lt;br&gt;
lets people use this example using the built-in lcc compiler in case&lt;br&gt;
they don't have a supported C++ compiler. Second, (and I am not at all&lt;br&gt;
sure about this one), I don't think the  MATLAB memory manager knows&lt;br&gt;
anything about any memory you allocated with the "new" operator. So if&lt;br&gt;
anything goes wrong with any of the mxCreate... or mxCalloc routines&lt;br&gt;
and the mex file exits back to MATLAB, all of the memory associated&lt;br&gt;
with any mxCreate... or mxCalloc calls will get freed, but your&lt;br&gt;
allocated variables created with the "new" operator may not get&lt;br&gt;
deleted. This would be a potential source for a memory leak. (Can&lt;br&gt;
anyone out there in the MATLAB community who knows more about this&lt;br&gt;
confirm what happens in this case? I need help here.)&lt;br&gt;
&lt;br&gt;
4) Creating the structure variables using mxCalloc was relative simple&lt;br&gt;
in this case because the structure was straightforward. The example&lt;br&gt;
would be more complex if your structure had pointers that pointed to&lt;br&gt;
other allocated memory, etc. And freeing this memory with mxFree for&lt;br&gt;
these cases would also be more complex ... would need to free the low&lt;br&gt;
levels first, etc. After having said this, I will point out that the&lt;br&gt;
MATLAB memory manager will save you and free all memory you allocated&lt;br&gt;
with the mxCreate... and mxCalloc calls when the mex file exits, even&lt;br&gt;
if you forget to do it.&lt;br&gt;
&lt;br&gt;
James Tursa&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
#include "mex.h"&lt;br&gt;
#include "matrix.h"&lt;br&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;
#include &amp;lt;string.h&amp;gt;&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#define ARRAYSIZE 3072&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#ifndef mwSize&lt;br&gt;
#define mwSize int&lt;br&gt;
#endif&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#ifndef mwIndex&lt;br&gt;
#define mwIndex int&lt;br&gt;
#endif&lt;br&gt;
&amp;nbsp;&lt;br&gt;
struct Frame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&amp;nbsp;&lt;br&gt;
struct UShortFrame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut1(struct Frame *f, char name[]);&lt;br&gt;
int mPut2(struct UShortFrame *u, char name[]);&lt;br&gt;
&amp;nbsp;&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct Frame *f;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct UShortFrame *u;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size_t t1 = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;frame_no = 1.0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( i=0; i&amp;lt;ARRAYSIZE; i++ )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;dist[i] = (double) i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;ampl[i] = (double) 2*i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct&lt;br&gt;
UShortFrame) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;frame_no = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( i=0; i&amp;lt;ARRAYSIZE; i++ )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;dist[i] = i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;ampl[i] = 2*i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut1(f, "f") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut1 for f did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut2(u, "u") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut2 for u did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(u);&lt;br&gt;
}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
// Put a Frame structure into MATLAB base workspace&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut1(struct Frame *f, char name[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int r;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(f-&amp;gt;frame_no), sizeof(double));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;dist), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;ampl), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = mexPutVariable("base", name, pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxDestroyArray(pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br&gt;
}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
// Put a UShortFrame structure into MATLAB base workspace&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut2(struct UShortFrame *u, char name[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int r;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(u-&amp;gt;frame_no), sizeof(unsigned short));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;dist), sizeof(unsigned short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;ampl), sizeof(unsigned short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = mexPutVariable("base", name, pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxDestroyArray(pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 02 Nov 2007 06:10:21 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399538</link>
      <author>Faisal </author>
      <description>Hi James,&lt;br&gt;
Thanks for putting so much effort in for the reply. However,&lt;br&gt;
you seems to have made all the processing within the&lt;br&gt;
mexFunction. On the otherhand I want it to be used as&lt;br&gt;
wrapper function. I want to do the implementation in my C++&lt;br&gt;
function and have mexFunction return it.  I have posted my&lt;br&gt;
code, can you please correct me how to pass the values that&lt;br&gt;
my function is reading.&lt;br&gt;
Thanks,&lt;br&gt;
&lt;br&gt;
#include "mex.h"&lt;br&gt;
#include "matrix.h"&lt;br&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;
#include &amp;lt;string.h&amp;gt;&lt;br&gt;
#include &amp;lt;fstream&amp;gt;&lt;br&gt;
#include &amp;lt;iostream&amp;gt;&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#define ARRAYSIZE 3072&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#ifndef mwSize&lt;br&gt;
#define mwSize int&lt;br&gt;
#endif&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#ifndef mwIndex&lt;br&gt;
#define mwIndex int&lt;br&gt;
#endif&lt;br&gt;
using namespace std;&lt;br&gt;
struct Frame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&amp;nbsp;&lt;br&gt;
struct UShortFrame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
void ReadFromFile(const char *filename, int ArraySize)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;unsigned read_frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UShortFrame* usframe = new UShortFrame;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename = "data.dat";&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifstream filein(filename, ios::in | ios::binary);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!filein) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (filein.read((char*)usframe,sizeof(UShortFrame)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Frame* frame = new Frame;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;frame_no = usframe-&amp;gt;frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; 3072; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;dist[i] = usframe-&amp;gt;dist[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;ampl[i] = usframe-&amp;gt;ampl[i];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filein.close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete []usframe;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut1(struct Frame *f, char name[]);&lt;br&gt;
int mPut2(struct UShortFrame *u, char name[]);&lt;br&gt;
&amp;nbsp;&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct Frame *f;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct UShortFrame *u;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size_t t1 = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;frame_no = 1.0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( i=0; i&amp;lt;ARRAYSIZE; i++ )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;dist[i] = (double) i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;ampl[i] = (double) 2*i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct&lt;br&gt;
UShortFrame) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;frame_no = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( i=0; i&amp;lt;ARRAYSIZE; i++ )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;dist[i] = i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;ampl[i] = 2*i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut1(f, "f") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut1 for f did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut2(u, "u") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut2 for u did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(u);&lt;br&gt;
}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
// Put a Frame structure into MATLAB base workspace&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut1(struct Frame *f, char name[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int r;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(f-&amp;gt;frame_no), sizeof(double));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;dist), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;ampl), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = mexPutVariable("base", name, pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxDestroyArray(pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br&gt;
}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
// Put a UShortFrame structure into MATLAB base workspace&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut2(struct UShortFrame *u, char name[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int r;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(u-&amp;gt;frame_no), sizeof(unsigned short));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;dist), sizeof(unsigned&lt;br&gt;
short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;ampl), sizeof(unsigned&lt;br&gt;
short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = mexPutVariable("base", name, pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxDestroyArray(pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br&gt;
}&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 02 Nov 2007 06:12:01 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399539</link>
      <author>Faisal </author>
      <description>Hi James,&lt;br&gt;
Thanks for putting so much effort in for the reply. However,&lt;br&gt;
you seems to have made all the processing within the&lt;br&gt;
mexFunction. On the otherhand I want it to be used as&lt;br&gt;
wrapper function. I want to do the implementation in my C++&lt;br&gt;
function and have mexFunction return it.  I have posted my&lt;br&gt;
code, can you please correct me how to pass the values that&lt;br&gt;
my function is reading.&lt;br&gt;
Thanks,&lt;br&gt;
&lt;br&gt;
#include "mex.h"&lt;br&gt;
#include "matrix.h"&lt;br&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;
#include &amp;lt;string.h&amp;gt;&lt;br&gt;
#include &amp;lt;fstream&amp;gt;&lt;br&gt;
#include &amp;lt;iostream&amp;gt;&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#define ARRAYSIZE 3072&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#ifndef mwSize&lt;br&gt;
#define mwSize int&lt;br&gt;
#endif&lt;br&gt;
&amp;nbsp;&lt;br&gt;
#ifndef mwIndex&lt;br&gt;
#define mwIndex int&lt;br&gt;
#endif&lt;br&gt;
using namespace std;&lt;br&gt;
struct Frame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&amp;nbsp;&lt;br&gt;
struct UShortFrame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
void ReadFromFile(const char *filename, int ArraySize)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;unsigned read_frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UShortFrame* usframe = new UShortFrame;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename = "data.dat";&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifstream filein(filename, ios::in | ios::binary);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!filein) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if (filein.read((char*)usframe,sizeof(UShortFrame)))&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Frame* frame = new Frame;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;frame_no = usframe-&amp;gt;frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; 3072; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;dist[i] = usframe-&amp;gt;dist[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;frame-&amp;gt;ampl[i] = usframe-&amp;gt;ampl[i];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filein.close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;delete []usframe;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut1(struct Frame *f, char name[]);&lt;br&gt;
int mPut2(struct UShortFrame *u, char name[]);&lt;br&gt;
&amp;nbsp;&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct Frame *f;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct UShortFrame *u;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size_t t1 = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;frame_no = 1.0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( i=0; i&amp;lt;ARRAYSIZE; i++ )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;dist[i] = (double) i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;ampl[i] = (double) 2*i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct&lt;br&gt;
UShortFrame) );&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;frame_no = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for( i=0; i&amp;lt;ARRAYSIZE; i++ )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;dist[i] = i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u-&amp;gt;ampl[i] = 2*i;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut1(f, "f") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut1 for f did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut2(u, "u") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut2 for u did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(u);&lt;br&gt;
}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
// Put a Frame structure into MATLAB base workspace&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut1(struct Frame *f, char name[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int r;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(f-&amp;gt;frame_no), sizeof(double));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;dist), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;ampl), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = mexPutVariable("base", name, pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxDestroyArray(pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br&gt;
}&lt;br&gt;
&amp;nbsp;&lt;br&gt;
// Put a UShortFrame structure into MATLAB base workspace&lt;br&gt;
&amp;nbsp;&lt;br&gt;
int mPut2(struct UShortFrame *u, char name[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int r;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(u-&amp;gt;frame_no), sizeof(unsigned short));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;dist), sizeof(unsigned&lt;br&gt;
short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;ampl), sizeof(unsigned&lt;br&gt;
short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;r = mexPutVariable("base", name, pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxDestroyArray(pm);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return r;&lt;br&gt;
}&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Fri, 02 Nov 2007 16:20:16 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399597</link>
      <author>James Tursa</author>
      <description>On Fri, 2 Nov 2007 06:12:01 +0000 (UTC), "Faisal "&lt;br&gt;
&amp;lt;faisal_mufti.nospam@yahoo.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;Hi James,&lt;br&gt;
&amp;gt;Thanks for putting so much effort in for the reply. However,&lt;br&gt;
&amp;gt;you seems to have made all the processing within the&lt;br&gt;
&amp;gt;mexFunction. On the otherhand I want it to be used as&lt;br&gt;
&amp;gt;wrapper function. I want to do the implementation in my C++&lt;br&gt;
&amp;gt;function and have mexFunction return it.&lt;br&gt;
&lt;br&gt;
Before I write any more code, I need to clearly understand what it is&lt;br&gt;
you are after. I gave you C routines that put your structures into the&lt;br&gt;
MATLAB workspace using any name you like (I used "f" and "u" but you&lt;br&gt;
could change that). You can call these routines from anywhere in your&lt;br&gt;
code to put any number of your variables into the MATLAB workspace.&lt;br&gt;
Apparently this is not what you want, exactly, so I need some help in&lt;br&gt;
understand what you want. Could you write a hypothetical MATLAB&lt;br&gt;
command line and then describe what it is you expect to happen? For&lt;br&gt;
example, if you named my original file structput.c, then it would be&lt;br&gt;
used as follows:&lt;br&gt;
&lt;br&gt;
&amp;gt;&amp;gt; mex structput.c&lt;br&gt;
&amp;gt;&amp;gt; structput&lt;br&gt;
&lt;br&gt;
and the result would be two structure variables, f and u, that are in&lt;br&gt;
the MATLAB workspace.&lt;br&gt;
&lt;br&gt;
Are you trying to pass arguments, like this?&lt;br&gt;
&lt;br&gt;
&amp;gt;&amp;gt; [out1 out2] = structmex(in1, in2, in2)&lt;br&gt;
&lt;br&gt;
Do you get what I am asking?  Please give me an example of a command&lt;br&gt;
line as you would like it to work and describe what should happen when&lt;br&gt;
you invoke it. Thanks.&lt;br&gt;
&lt;br&gt;
James Tursa&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 03 Nov 2007 02:48:34 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399668</link>
      <author>Faisal </author>
      <description>Hi James&lt;br&gt;
I do like to pass on arguments like [a,b]=strucmex(in1,in2);&lt;br&gt;
I have modified you mex function and I have been able to&lt;br&gt;
pass input arguments but yet to succeed with output&lt;br&gt;
arguments. Your example is no doubt an excellent reply. But&lt;br&gt;
as this is an initial block and I need to know if I have my&lt;br&gt;
somefun, how will I be able to pass argument input and&lt;br&gt;
output argumnets as shown in MEX help in matlab along with&lt;br&gt;
structure passing that you have shown. &lt;br&gt;
&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct Frame *f;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct UShortFrame *u;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size_t t1 = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int i,mrows, ncols;;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double *f_count;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char *filename;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mrows = mxGetM(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ncols = mxGetN(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f_count = mxGetPr(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename=mxArrayToString(prhs[1]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifstream filein(filename, ios::in | ios::binary);   &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!filein) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct&lt;br&gt;
UShortFrame) ); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;(filein.read((char*)u,sizeof(UShortFrame)));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;frame_no = u-&amp;gt;frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; ARRAYSIZE; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;dist[i]=u-&amp;gt;dist[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;ampl[i]=u-&amp;gt;ampl[i];&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut1(f, "f") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut1 for f did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( mPut2(u, "u") )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexPrintf("mPut2 for u did not work\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filein.close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(u);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
}&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 03 Nov 2007 07:51:31 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399679</link>
      <author>James Tursa</author>
      <description>On Sat, 3 Nov 2007 02:48:34 +0000 (UTC), "Faisal "&lt;br&gt;
&amp;lt;faisal_mufti.nospam@yahoo.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;Hi James&lt;br&gt;
&amp;gt;I do like to pass on arguments like [a,b]=strucmex(in1,in2);&lt;br&gt;
&amp;gt;I have modified you mex function and I have been able to&lt;br&gt;
&amp;gt;pass input arguments but yet to succeed with output&lt;br&gt;
&amp;gt;arguments. Your example is no doubt an excellent reply. But&lt;br&gt;
&amp;gt;as this is an initial block and I need to know if I have my&lt;br&gt;
&amp;gt;somefun, how will I be able to pass argument input and&lt;br&gt;
&amp;gt;output argumnets as shown in MEX help in matlab along with&lt;br&gt;
&amp;gt;structure passing that you have shown. &lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;void mexFunction(int nlhs, mxArray *plhs[], int nrhs,&lt;br&gt;
&amp;gt;     const mxArray *prhs[])&lt;br&gt;
&amp;gt;{&lt;br&gt;
&amp;gt;    struct Frame *f;&lt;br&gt;
&amp;gt;    struct UShortFrame *u;&lt;br&gt;
&amp;gt;    size_t t1 = 1;&lt;br&gt;
&amp;gt;    int i,mrows, ncols;;&lt;br&gt;
&amp;gt;    double *f_count;&lt;br&gt;
&amp;gt;    char *filename;&lt;br&gt;
&amp;gt;    &lt;br&gt;
&amp;gt;    mrows = mxGetM(prhs[0]);&lt;br&gt;
&amp;gt;    ncols = mxGetN(prhs[0]);&lt;br&gt;
&amp;gt;    f_count = mxGetPr(prhs[0]);&lt;br&gt;
&amp;gt;    filename=mxArrayToString(prhs[1]);&lt;br&gt;
&amp;gt;    &lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;    ifstream filein(filename, ios::in | ios::binary);   &lt;br&gt;
&amp;gt;        &lt;br&gt;
&amp;gt;      if(!filein) {&lt;br&gt;
&amp;gt;          std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;gt;           &lt;br&gt;
&amp;gt;   u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct&lt;br&gt;
&amp;gt;UShortFrame) ); &lt;br&gt;
&amp;gt;   f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;   (filein.read((char*)u,sizeof(UShortFrame)));&lt;br&gt;
&amp;gt;     &lt;br&gt;
&amp;gt;     {&lt;br&gt;
&amp;gt;            f-&amp;gt;frame_no = u-&amp;gt;frame_no;&lt;br&gt;
&amp;gt;            for (int i = 0; i &amp;lt; ARRAYSIZE; ++i)&lt;br&gt;
&amp;gt;               {&lt;br&gt;
&amp;gt;                    f-&amp;gt;dist[i]=u-&amp;gt;dist[i];&lt;br&gt;
&amp;gt;                    f-&amp;gt;ampl[i]=u-&amp;gt;ampl[i];&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;               }&lt;br&gt;
&amp;gt;   }&lt;br&gt;
&amp;gt;    &lt;br&gt;
&amp;gt;    if( mPut1(f, "f") )&lt;br&gt;
&amp;gt;        mexPrintf("mPut1 for f did not work\n");&lt;br&gt;
&amp;gt;    &lt;br&gt;
&amp;gt;    if( mPut2(u, "u") )&lt;br&gt;
&amp;gt;        mexPrintf("mPut2 for u did not work\n");&lt;br&gt;
&amp;gt;    filein.close();&lt;br&gt;
&amp;gt;    mxFree(f);&lt;br&gt;
&amp;gt;    mxFree(u);&lt;br&gt;
&amp;gt;    &lt;br&gt;
&amp;gt;}&lt;br&gt;
&lt;br&gt;
So if you want to invoke it as follows:&lt;br&gt;
&lt;br&gt;
[a,b]=strucmex(in1,in2);&lt;br&gt;
&lt;br&gt;
then do you want f to be put into the first output argument a, and u&lt;br&gt;
to be put in the second arbument b?  I can easily modify my code to do&lt;br&gt;
this if that is what you really want.&lt;br&gt;
&lt;br&gt;
James Tursa&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 03 Nov 2007 12:50:35 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399691</link>
      <author>Faisal </author>
      <description>Yes, like that.&lt;br&gt;
Thanks&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sat, 03 Nov 2007 17:35:52 -0400</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399703</link>
      <author>James Tursa</author>
      <description>On Sat, 3 Nov 2007 12:50:35 +0000 (UTC), "Faisal "&lt;br&gt;
&amp;lt;faisal_mufti.nospam@yahoo.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;Yes, like that.&lt;br&gt;
&amp;gt;Thanks&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Try this. I couldn't test it because I don't have your file. One note,&lt;br&gt;
however, is that you don't use the first input argument for anything&lt;br&gt;
so I don't know why you are passing it in, but I left the code there&lt;br&gt;
because you wrote it that way.&lt;br&gt;
&lt;br&gt;
James Tursa&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
#include "mex.h"&lt;br&gt;
#include "matrix.h"&lt;br&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;
#include &amp;lt;string.h&amp;gt;&lt;br&gt;
&lt;br&gt;
#define ARRAYSIZE 3072&lt;br&gt;
&lt;br&gt;
#ifndef mwSize&lt;br&gt;
#define mwSize int&lt;br&gt;
#endif&lt;br&gt;
&lt;br&gt;
#ifndef mwIndex&lt;br&gt;
#define mwIndex int&lt;br&gt;
#endif&lt;br&gt;
&lt;br&gt;
struct Frame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
struct UShortFrame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
mxArray *FrameTomxArray(struct Frame *f);&lt;br&gt;
mxArray *UShortFrameTomxArray(struct UShortFrame *u);&lt;br&gt;
&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct Frame *f;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct UShortFrame *u;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size_t t1 = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int mrows, ncols;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double *f_count;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char *filename;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( nrhs != 2 )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("Must have exactly two input arguments\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( nlhs &amp;gt; 2 )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("Must have &amp;lt;= two output arguments\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( !mxIsDouble(prhs[0]) )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("1st input argument must be double\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( !mxIsChar(prhs[1]) )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("2nd input argument must be char\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
// Why are you doing this? You don't use mrows, ncols, or f_count&lt;br&gt;
anywhere&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mrows = mxGetM(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ncols = mxGetN(prhs[0]);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f_count = mxGetPr(prhs[0]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename = mxArrayToString(prhs[1]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifstream filein(filename, ios::in | ios::binary);   &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if(!filein) {&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;std::cout &amp;lt;&amp;lt; "Cannot open file to read.\n"; }&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct UShortFrame)&lt;br&gt;
); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;(filein.read((char*)u,sizeof(struct UShortFrame)));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;frame_no = u-&amp;gt;frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; ARRAYSIZE; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;dist[i]=u-&amp;gt;dist[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;ampl[i]=u-&amp;gt;ampl[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filein.close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plhs[0] = FrameTomxArray(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( nlhs == 2 )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plhs[1] = UShortFrameTomxArray(u);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(u);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(filename);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
// Convert a Frame structure to an mxArray&lt;br&gt;
&lt;br&gt;
mxArray *FrameTomxArray(struct Frame *f)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(f-&amp;gt;frame_no), sizeof(double));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;dist), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (f-&amp;gt;ampl), sizeof(double)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return pm;&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
// Convert a UShortFrame structure to an mxArray&lt;br&gt;
&lt;br&gt;
mxArray * UShortFrameTomxArray(struct UShortFrame *u)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *pm, *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const int nfields = 3;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const char *fieldnames[3] = {"frame_no","dist","ampl"};&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mwIndex index = 0;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;pm = mxCreateStructMatrix(m, n, nfields, fieldnames);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), &amp;(u-&amp;gt;frame_no), sizeof(unsigned short));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 0, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;dist), sizeof(unsigned short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 1, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = ARRAYSIZE;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxUINT16_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), (u-&amp;gt;ampl), sizeof(unsigned short)*ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxSetFieldByNumber(pm, index, 2, mx);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return pm;&lt;br&gt;
}&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sun, 04 Nov 2007 08:51:50 -0500</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399744</link>
      <author>Faisal </author>
      <description>Thanks heaps!&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sun, 04 Nov 2007 09:22:27 -0500</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399746</link>
      <author>Faisal </author>
      <description>Hi James, one last thing if you can show me to pass to&lt;br&gt;
MATLAB these two structure values ( dist and ampl) as two&lt;br&gt;
output arguments and not as structures. ?&lt;br&gt;
Thanks,&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Sun, 04 Nov 2007 17:02:22 -0500</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399772</link>
      <author>James Tursa</author>
      <description>On Sun, 4 Nov 2007 09:22:27 +0000 (UTC), "Faisal "&lt;br&gt;
&amp;lt;faisal_mufti.nospam@yahoo.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;Hi James, one last thing if you can show me to pass to&lt;br&gt;
&amp;gt;MATLAB these two structure values ( dist and ampl) as two&lt;br&gt;
&amp;gt;output arguments and not as structures. ?&lt;br&gt;
&amp;gt;Thanks,&lt;br&gt;
&lt;br&gt;
1) Do you want to pass f.dist and f.ampl and u.dist and u.ampl?  i.e.,&lt;br&gt;
do you want to pass all of them? Or just one of the versions, either&lt;br&gt;
the double or the short?&lt;br&gt;
&lt;br&gt;
2) Do you want to pass them in addition to the structures that are&lt;br&gt;
already passed, or in place of the structures that are already passed?&lt;br&gt;
&lt;br&gt;
Note that once the structures are in the MATLAB workspace, you can get&lt;br&gt;
at the individual arrays easily. For example, using the current code I&lt;br&gt;
just supplied:&lt;br&gt;
&lt;br&gt;
&amp;gt;&amp;gt; [a b] = structput(1.0,'myfile');&lt;br&gt;
&lt;br&gt;
then you can get at the individual arrays by typing a.dist, a.ampl,&lt;br&gt;
b.dist, and b.ampl in the MATLAB workspace.  For example:&lt;br&gt;
&lt;br&gt;
&amp;gt;&amp;gt; sum(a.dist)&lt;br&gt;
&lt;br&gt;
Finally, note that I have assumed that an unsigned short in C was a&lt;br&gt;
16-bit quantity. This isn't strictly guaranteed in C. You are really&lt;br&gt;
only guaranteed that a short is at least 16 bits, but it could be&lt;br&gt;
longer. To be more robust one would check sizeof(short) and then use&lt;br&gt;
an mxUINT16_CLASS or an mxUINT32_CLASS accordingly.&lt;br&gt;
&lt;br&gt;
James Tursa&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Mon, 05 Nov 2007 00:03:11 -0500</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399787</link>
      <author>Faisal </author>
      <description>Hi&lt;br&gt;
&amp;gt; 1) Do you want to pass f.dist and f.ampl and u.dist and&lt;br&gt;
&amp;gt;u.ampl?  i.e.,do you want to pass all of them? Or just one&lt;br&gt;
&amp;gt;of the versions, either&amp;gt; the double or the short?&lt;br&gt;
&lt;br&gt;
Only f.ampl and f.dist. &lt;br&gt;
&lt;br&gt;
&amp;gt; 2) Do you want to pass them in addition to the structures&lt;br&gt;
&amp;gt;that are already passed, or in place of the structures that&lt;br&gt;
&amp;gt;are already passed?&lt;br&gt;
&lt;br&gt;
No only them, not the structure&lt;br&gt;
&lt;br&gt;
&amp;gt;Note that once the structures are in the MATLAB workspace,&lt;br&gt;
&amp;gt;you can get at the individual arrays easily. For example,&lt;br&gt;
&amp;gt;using the current code I&lt;br&gt;
&amp;gt; just supplied:&lt;br&gt;
&amp;nbsp;&lt;br&gt;
I know that I can access the structured variables, but my&lt;br&gt;
code works better in a non structured way as I have to do&lt;br&gt;
some manipulation like 'find' which does not work on cells&lt;br&gt;
so I again have to put loops in Matlab which will slow down&lt;br&gt;
my processing time.&lt;br&gt;
&lt;br&gt;
&amp;gt; Finally, note that I have assumed that an unsigned short&lt;br&gt;
&amp;gt;in C was a 16-bit quantity. This isn't strictly guaranteed&lt;br&gt;
&amp;gt;in C. You are really only guaranteed that a short is at&lt;br&gt;
&amp;gt;least 16 bits, but it could be longer. To be more robust&lt;br&gt;
&amp;gt;one would check sizeof(short) and then use&lt;br&gt;
&amp;gt; an mxUINT16_CLASS or an mxUINT32_CLASS accordingly.&lt;br&gt;
&lt;br&gt;
Thanks, I will see to it.&lt;br&gt;
&lt;br&gt;
Regards,&lt;br&gt;
Faisal&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Mon, 05 Nov 2007 07:15:57 -0500</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399817</link>
      <author>James Tursa</author>
      <description>On Mon, 5 Nov 2007 00:03:11 +0000 (UTC), "Faisal "&lt;br&gt;
&amp;lt;faisal_mufti.nospam@yahoo.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;Hi&lt;br&gt;
&amp;gt;&amp;gt; 1) Do you want to pass f.dist and f.ampl and u.dist and&lt;br&gt;
&amp;gt;&amp;gt;u.ampl?  i.e.,do you want to pass all of them? Or just one&lt;br&gt;
&amp;gt;&amp;gt;of the versions, either&amp;gt; the double or the short?&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;Only f.ampl and f.dist. &lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; 2) Do you want to pass them in addition to the structures&lt;br&gt;
&amp;gt;&amp;gt;that are already passed, or in place of the structures that&lt;br&gt;
&amp;gt;&amp;gt;are already passed?&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;No only them, not the structure&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt;Note that once the structures are in the MATLAB workspace,&lt;br&gt;
&amp;gt;&amp;gt;you can get at the individual arrays easily. For example,&lt;br&gt;
&amp;gt;&amp;gt;using the current code I&lt;br&gt;
&amp;gt;&amp;gt; just supplied:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt;I know that I can access the structured variables, but my&lt;br&gt;
&amp;gt;code works better in a non structured way as I have to do&lt;br&gt;
&amp;gt;some manipulation like 'find' which does not work on cells&lt;br&gt;
&amp;gt;so I again have to put loops in Matlab which will slow down&lt;br&gt;
&amp;gt;my processing time.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; Finally, note that I have assumed that an unsigned short&lt;br&gt;
&amp;gt;&amp;gt;in C was a 16-bit quantity. This isn't strictly guaranteed&lt;br&gt;
&amp;gt;&amp;gt;in C. You are really only guaranteed that a short is at&lt;br&gt;
&amp;gt;&amp;gt;least 16 bits, but it could be longer. To be more robust&lt;br&gt;
&amp;gt;&amp;gt;one would check sizeof(short) and then use&lt;br&gt;
&amp;gt;&amp;gt; an mxUINT16_CLASS or an mxUINT32_CLASS accordingly.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;Thanks, I will see to it.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;Regards,&lt;br&gt;
&amp;gt;Faisal&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
Here it is. I deleted the first double argument which you were not&lt;br&gt;
using. There is only one input argument, the filename. The double&lt;br&gt;
versions of dist and ampl are the two output arguments.&lt;br&gt;
&lt;br&gt;
James Tursa&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
#include "mex.h"&lt;br&gt;
#include "matrix.h"&lt;br&gt;
#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;
#include &amp;lt;string.h&amp;gt;&lt;br&gt;
&lt;br&gt;
#define ARRAYSIZE 3072&lt;br&gt;
&lt;br&gt;
#ifndef mwSize&lt;br&gt;
#define mwSize int&lt;br&gt;
#endif&lt;br&gt;
&lt;br&gt;
#ifndef mwIndex&lt;br&gt;
#define mwIndex int&lt;br&gt;
#endif&lt;br&gt;
&lt;br&gt;
struct Frame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
struct UShortFrame&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short dist[ARRAYSIZE];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unsigned short ampl[ARRAYSIZE];&lt;br&gt;
};&lt;br&gt;
&lt;br&gt;
mxArray *DoubleTomxArray(double *dp, int dn);&lt;br&gt;
&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs,&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct Frame *f;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;struct UShortFrame *u;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;size_t t1 = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;char *filename;&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( nrhs != 1 )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("Must have exactly one input argument\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( nlhs &amp;gt; 2 )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("Must have &amp;lt;= two output arguments\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( !mxIsChar(prhs[0]) )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("Input argument must be char\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename = mxArrayToString(prhs[0]);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ifstream filein(filename, ios::in | ios::binary);   &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(filename);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( !filein )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mexErrMsgTxt("Cannot open file to read.\n");&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;u = (struct UShortFrame *) mxCalloc( t1, sizeof(struct&lt;br&gt;
UShortFrame) ); &lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f = (struct Frame *) mxCalloc( t1, sizeof(struct Frame) );&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(filein.read((char*)u,sizeof(struct UShortFrame)));&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;frame_no = u-&amp;gt;frame_no;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; ARRAYSIZE; ++i)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;dist[i]=u-&amp;gt;dist[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;f-&amp;gt;ampl[i]=u-&amp;gt;ampl[i];&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filein.close();&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plhs[0] = DoubleTomxArray(f-&amp;gt;dist, ARRAYSIZE);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if( nlhs == 2 )&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;plhs[1] = DoubleTomxArray(f-&amp;gt;ampl, ARRAYSIZE);&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(f);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxFree(u);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
// Convert a double array to an mxArray&lt;br&gt;
&lt;br&gt;
mxArray *DoubleTomxArray(double *dp, int dn)&lt;br&gt;
{&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mxArray *mx;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mwSize m, n;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;m = 1;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;n = dn;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mx = mxCreateNumericMatrix(m, n, mxDOUBLE_CLASS, mxREAL);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;memcpy(mxGetPr(mx), dp, sizeof(double)*dn);&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return mx;&lt;br&gt;
}&lt;br&gt;
</description>
    </item>
    <item>
      <pubDate>Mon, 05 Nov 2007 23:39:19 -0500</pubDate>
      <title>Re: Pass structure to MATLAB</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/158602#399954</link>
      <author>Faisal </author>
      <description>Thanks a lot!&lt;br&gt;
</description>
    </item>
  </channel>
</rss>
