<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749</link>
    <title>MATLAB Central Newsreader - mex file wrapper for dll needing function handle</title>
    <description>Feed for thread: mex file wrapper for dll needing function handle</description>
    <language>en-us</language>
    <copyright>&amp;copy;1994-2012 by 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>MathWorks</title>
      <url>http://www.mathworks.com/images/membrane_icon.gif</url>
    </image>
    <item>
      <pubDate>Tue, 03 Mar 2009 07:41:02 -0500</pubDate>
      <title>mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632051</link>
      <author>Todd Welti</author>
      <description>&lt;br&gt;
I'm trying to implement this idea from tech note 1-6C8PEQ, where a mex file wrapper is used to get around the limitation in matlab that you can't pass a function handle to a loaded dll library (which would be used as a callback).  In my case the dll would return three doubles, x, y, and z into &quot;mycallback&quot;, which I woule like to return to Matlab (&quot;myMatCallback&quot;).  It would look like shown below.  I cant for the life of me figure out how to get x,y and z into the format of prhs for hte mexCallMatlab command.  Any suggetions appreciated.  I can compile the code in general, except for anything that I have tried to get pointers to x,y, and z and make the prhs array, generates errors like: 'cannot convert parameter 1 from 'double' to 'const mxArray *'&lt;br&gt;
&lt;br&gt;
#include &quot;mex.h&quot;&lt;br&gt;
#include &quot;myAPI.h&quot;&lt;br&gt;
&lt;br&gt;
// Callback function&lt;br&gt;
void myCallback(double x, double y, double z)&lt;br&gt;
{&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
/* THIS IS THE PART THAT HAS ME STUMPED*/&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
mexCallMATLAB(0, NULL, 1, prhs,&quot;myMatCallback&quot;);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
// MEX Gateway&lt;br&gt;
void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])&lt;br&gt;
{&lt;br&gt;
&lt;br&gt;
void (*cbPtr)(double x, double y, double z) = NULL;&lt;br&gt;
cbPtr = myCallback;&lt;br&gt;
&lt;br&gt;
// Assume that myAPIRoutine is implemented in myAPI.dll&lt;br&gt;
myAPIRoutine(cbPtr);&lt;br&gt;
}&lt;br&gt;
&lt;br&gt;
&amp;nbsp;</description>
    </item>
    <item>
      <pubDate>Tue, 03 Mar 2009 20:48:33 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632238</link>
      <author>Ashish Uthama</author>
      <description>On Tue, 03 Mar 2009 02:41:02 -0500, Todd Welti &amp;lt;twelti@harman.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; I'm trying to implement this idea from tech note 1-6C8PEQ, where a mex  &lt;br&gt;
&amp;gt; file wrapper is used to get around the limitation in matlab that you  &lt;br&gt;
&amp;gt; can't pass a function handle to a loaded dll library (which would be  &lt;br&gt;
&amp;gt; used as a callback).  In my case the dll would return three doubles, x,  &lt;br&gt;
&amp;gt; y, and z into &quot;mycallback&quot;, which I woule like to return to Matlab  &lt;br&gt;
&amp;gt; (&quot;myMatCallback&quot;).  It would look like shown below.  I cant for the life  &lt;br&gt;
&amp;gt; of me figure out how to get x,y and z into the format of prhs for hte  &lt;br&gt;
&amp;gt; mexCallMatlab command.  Any suggetions appreciated.  I can compile the  &lt;br&gt;
&amp;gt; code in general, except for anything that I have tried to get pointers  &lt;br&gt;
&amp;gt; to x,y, and z and make the prhs array, generates errors like: 'cannot  &lt;br&gt;
&amp;gt; convert parameter 1 from 'double' to 'const mxArray *'&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; #include &quot;mex.h&quot;&lt;br&gt;
&amp;gt; #include &quot;myAPI.h&quot;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; // Callback function&lt;br&gt;
&amp;gt; void myCallback(double x, double y, double z)&lt;br&gt;
&amp;gt; {&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; /* THIS IS THE PART THAT HAS ME STUMPED*/&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; mexCallMATLAB(0, NULL, 1, prhs,&quot;myMatCallback&quot;);&lt;br&gt;
&amp;gt; }&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; // MEX Gateway&lt;br&gt;
&amp;gt; void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray  &lt;br&gt;
&amp;gt; *prhs[])&lt;br&gt;
&amp;gt; {&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; void (*cbPtr)(double x, double y, double z) = NULL;&lt;br&gt;
&amp;gt; cbPtr = myCallback;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; // Assume that myAPIRoutine is implemented in myAPI.dll&lt;br&gt;
&amp;gt; myAPIRoutine(cbPtr);&lt;br&gt;
&amp;gt; }&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&lt;br&gt;
mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&lt;br&gt;
//air code!&lt;br&gt;
mxArray* prhs[3];&lt;br&gt;
mwSize dims[2]={ 1 1};&lt;br&gt;
prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
mexGetPr(prhs[0])=x;&lt;br&gt;
//..so on for y and z</description>
    </item>
    <item>
      <pubDate>Tue, 03 Mar 2009 21:19:03 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632251</link>
      <author>James Tursa</author>
      <description>&quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; //air code!&lt;br&gt;
&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt; &lt;br&gt;
&lt;br&gt;
Couple of typos. Since dims is an array, it will act as a double * when passed, so you don't need the &amp;dims in the call, just dims. And you are missing a comma in the dims initialization. Also, mxGetPr returns a pointer result that is not an lvalue. You need to dereference it for the assignment. e.g.&lt;br&gt;
&lt;br&gt;
&amp;nbsp;mxArray* prhs[3];&lt;br&gt;
&amp;nbsp;mwSize dims[2]={ 1, 1};&lt;br&gt;
&amp;nbsp;prhs[0]=mxCreateNumericArray(2,dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;nbsp;*(mexGetPr(prhs[0])) = x;&lt;br&gt;
&lt;br&gt;
Or, as you almost pointed out, you can use mxCreateDoubleScalar for this:&lt;br&gt;
&lt;br&gt;
prhs[0] = mxCreateDoubleScalar(x);&lt;br&gt;
&lt;br&gt;
James Tursa</description>
    </item>
    <item>
      <pubDate>Tue, 03 Mar 2009 21:25:05 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632253</link>
      <author>James Tursa</author>
      <description>&quot;James Tursa&quot; &amp;lt;aclassyguywithaknotac@hotmail.com&amp;gt; wrote in message &amp;lt;gok6s7$6oc$1@fred.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; ... Since dims is an array, it will act as a double * when passed ...&lt;br&gt;
&lt;br&gt;
mwSize *&lt;br&gt;
&lt;br&gt;
James Tursa</description>
    </item>
    <item>
      <pubDate>Tue, 03 Mar 2009 21:36:01 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632257</link>
      <author>Todd Welti</author>
      <description>&quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; On Tue, 03 Mar 2009 02:41:02 -0500, Todd Welti &amp;lt;twelti@harman.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; I'm trying to implement this idea from tech note 1-6C8PEQ, where a mex  &lt;br&gt;
&amp;gt; &amp;gt; file wrapper is used to get around the limitation in matlab that you  &lt;br&gt;
&amp;gt; &amp;gt; can't pass a function handle to a loaded dll library (which would be  &lt;br&gt;
&amp;gt; &amp;gt; used as a callback).  In my case the dll would return three doubles, x,  &lt;br&gt;
&amp;gt; &amp;gt; y, and z into &quot;mycallback&quot;, which I woule like to return to Matlab  &lt;br&gt;
&amp;gt; &amp;gt; (&quot;myMatCallback&quot;).  It would look like shown below.  I cant for the life  &lt;br&gt;
&amp;gt; &amp;gt; of me figure out how to get x,y and z into the format of prhs for hte  &lt;br&gt;
&amp;gt; &amp;gt; mexCallMatlab command.  Any suggetions appreciated.  I can compile the  &lt;br&gt;
&amp;gt; &amp;gt; code in general, except for anything that I have tried to get pointers  &lt;br&gt;
&amp;gt; &amp;gt; to x,y, and z and make the prhs array, generates errors like: 'cannot  &lt;br&gt;
&amp;gt; &amp;gt; convert parameter 1 from 'double' to 'const mxArray *'&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; #include &quot;mex.h&quot;&lt;br&gt;
&amp;gt; &amp;gt; #include &quot;myAPI.h&quot;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; // Callback function&lt;br&gt;
&amp;gt; &amp;gt; void myCallback(double x, double y, double z)&lt;br&gt;
&amp;gt; &amp;gt; {&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; /* THIS IS THE PART THAT HAS ME STUMPED*/&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; mexCallMATLAB(0, NULL, 1, prhs,&quot;myMatCallback&quot;);&lt;br&gt;
&amp;gt; &amp;gt; }&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; // MEX Gateway&lt;br&gt;
&amp;gt; &amp;gt; void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray  &lt;br&gt;
&amp;gt; &amp;gt; *prhs[])&lt;br&gt;
&amp;gt; &amp;gt; {&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; void (*cbPtr)(double x, double y, double z) = NULL;&lt;br&gt;
&amp;gt; &amp;gt; cbPtr = myCallback;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; // Assume that myAPIRoutine is implemented in myAPI.dll&lt;br&gt;
&amp;gt; &amp;gt; myAPIRoutine(cbPtr);&lt;br&gt;
&amp;gt; &amp;gt; }&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &lt;br&gt;
Thanks, but should i use &lt;br&gt;
&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; //air code!&lt;br&gt;
&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
Thanks, but should i use mxCreateScalar or mcCreateNumericArray?</description>
    </item>
    <item>
      <pubDate>Tue, 03 Mar 2009 21:49:07 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632270</link>
      <author>Ashish Uthama</author>
      <description>On Tue, 03 Mar 2009 16:19:03 -0500, James Tursa  &lt;br&gt;
&amp;lt;aclassyguywithaknotac@hotmail.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message  &lt;br&gt;
&amp;gt; &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; //air code!&lt;br&gt;
&amp;gt;&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt;&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt;&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt;&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt;&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Couple of typos. Since dims is an array, it will act as a double * when  &lt;br&gt;
&amp;gt; passed, so you don't need the &amp;dims in the call, just dims. And you are  &lt;br&gt;
&amp;gt; missing a comma in the dims initialization. Also, mxGetPr returns a  &lt;br&gt;
&amp;gt; pointer result that is not an lvalue. You need to dereference it for the  &lt;br&gt;
&amp;gt; assignment. e.g.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt;  mxArray* prhs[3];&lt;br&gt;
&amp;gt;  mwSize dims[2]={ 1, 1};&lt;br&gt;
&amp;gt;  prhs[0]=mxCreateNumericArray(2,dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt;  *(mexGetPr(prhs[0])) = x;&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Or, as you almost pointed out, you can use mxCreateDoubleScalar for this:&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; prhs[0] = mxCreateDoubleScalar(x);&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; James Tursa&lt;br&gt;
&lt;br&gt;
&lt;br&gt;
not typos..but plain errors :)&lt;br&gt;
thanks for the corrections.</description>
    </item>
    <item>
      <pubDate>Tue, 03 Mar 2009 22:33:02 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632286</link>
      <author>Todd Welti</author>
      <description>&quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message &amp;lt;op.up8j75y1a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; On Tue, 03 Mar 2009 16:19:03 -0500, James Tursa  &lt;br&gt;
&amp;gt; &amp;lt;aclassyguywithaknotac@hotmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message  &lt;br&gt;
&amp;gt; &amp;gt; &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; //air code!&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Couple of typos. Since dims is an array, it will act as a double * when  &lt;br&gt;
&amp;gt; &amp;gt; passed, so you don't need the &amp;dims in the call, just dims. And you are  &lt;br&gt;
&amp;gt; &amp;gt; missing a comma in the dims initialization. Also, mxGetPr returns a  &lt;br&gt;
&amp;gt; &amp;gt; pointer result that is not an lvalue. You need to dereference it for the  &lt;br&gt;
&amp;gt; &amp;gt; assignment. e.g.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;  mxArray* prhs[3];&lt;br&gt;
&amp;gt; &amp;gt;  mwSize dims[2]={ 1, 1};&lt;br&gt;
&amp;gt; &amp;gt;  prhs[0]=mxCreateNumericArray(2,dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; &amp;gt;  *(mexGetPr(prhs[0])) = x;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Or, as you almost pointed out, you can use mxCreateDoubleScalar for this:&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; prhs[0] = mxCreateDoubleScalar(x);&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; James Tursa&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; not typos..but plain errors :)&lt;br&gt;
&amp;gt; thanks for the corrections.&lt;br&gt;
&lt;br&gt;
Thanks for the tips, I'll try it tonight.  Also wondering if COM would also work to get the data stream from the third party dll into Matlab, and if there is any advantage?  Or if there is any other way that might be better than the callback method I'm currently trying.   The data is from a camera based headtracking unit (TrackIR/Optitrack).  I have the source code for the dll, but only marginal skills in C++...</description>
    </item>
    <item>
      <pubDate>Wed, 04 Mar 2009 04:11:01 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632337</link>
      <author>Todd Welti</author>
      <description>&quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message &amp;lt;op.up8j75y1a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; On Tue, 03 Mar 2009 16:19:03 -0500, James Tursa  &lt;br&gt;
&amp;gt; &amp;lt;aclassyguywithaknotac@hotmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message  &lt;br&gt;
&amp;gt; &amp;gt; &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; //air code!&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Couple of typos. Since dims is an array, it will act as a double * when  &lt;br&gt;
&amp;gt; &amp;gt; passed, so you don't need the &amp;dims in the call, just dims. And you are  &lt;br&gt;
&amp;gt; &amp;gt; missing a comma in the dims initialization. Also, mxGetPr returns a  &lt;br&gt;
&amp;gt; &amp;gt; pointer result that is not an lvalue. You need to dereference it for the  &lt;br&gt;
&amp;gt; &amp;gt; assignment. e.g.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;  mxArray* prhs[3];&lt;br&gt;
&amp;gt; &amp;gt;  mwSize dims[2]={ 1, 1};&lt;br&gt;
&amp;gt; &amp;gt;  prhs[0]=mxCreateNumericArray(2,dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; &amp;gt;  *(mexGetPr(prhs[0])) = x;&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Or, as you almost pointed out, you can use mxCreateDoubleScalar for this:&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; prhs[0] = mxCreateDoubleScalar(x);&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; James Tursa&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; not typos..but plain errors :)&lt;br&gt;
&amp;gt; thanks for the corrections.&lt;br&gt;
&lt;br&gt;
Why do you ahve to use the *(mexGetPr())?  Isn't prhs already a pointer?  Why can't you use *prhs[0]?</description>
    </item>
    <item>
      <pubDate>Wed, 04 Mar 2009 13:24:48 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632434</link>
      <author>Ashish Uthama</author>
      <description>On Tue, 03 Mar 2009 23:11:01 -0500, Todd Welti &amp;lt;twelti@harman.com&amp;gt; wrote:&lt;br&gt;
&lt;br&gt;
&amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message  &lt;br&gt;
&amp;gt; &amp;lt;op.up8j75y1a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt;&amp;gt; On Tue, 03 Mar 2009 16:19:03 -0500, James Tursa&lt;br&gt;
&amp;gt;&amp;gt; &amp;lt;aclassyguywithaknotac@hotmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; //air code!&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; Couple of typos. Since dims is an array, it will act as a double *  &lt;br&gt;
&amp;gt;&amp;gt; when&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; passed, so you don't need the &amp;dims in the call, just dims. And you  &lt;br&gt;
&amp;gt;&amp;gt; are&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; missing a comma in the dims initialization. Also, mxGetPr returns a&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; pointer result that is not an lvalue. You need to dereference it for  &lt;br&gt;
&amp;gt;&amp;gt; the&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; assignment. e.g.&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;  mxArray* prhs[3];&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;  mwSize dims[2]={ 1, 1};&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;  prhs[0]=mxCreateNumericArray(2,dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;  *(mexGetPr(prhs[0])) = x;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; Or, as you almost pointed out, you can use mxCreateDoubleScalar for  &lt;br&gt;
&amp;gt;&amp;gt; this:&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; prhs[0] = mxCreateDoubleScalar(x);&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; &amp;gt; James Tursa&lt;br&gt;
&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt;&lt;br&gt;
&amp;gt;&amp;gt; not typos..but plain errors :)&lt;br&gt;
&amp;gt;&amp;gt; thanks for the corrections.&lt;br&gt;
&amp;gt;&lt;br&gt;
&amp;gt; Why do you ahve to use the *(mexGetPr())?  Isn't prhs already a  &lt;br&gt;
&amp;gt; pointer?  Why can't you use *prhs[0]?&lt;br&gt;
&lt;br&gt;
The return type of mxCreateNumericArray is mxArray *&lt;br&gt;
prhs[0] is mxArray *  (think of an mxArray as a structure which represents  &lt;br&gt;
the MATLAB matrix type in C)&lt;br&gt;
x is of type double.&lt;br&gt;
&lt;br&gt;
To bridge this gap, use this function:&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;double *mxGetPr(const mxArray *pm);&lt;br&gt;
&lt;br&gt;
mxGetPr(prhs[0]) will give you a double pointer&lt;br&gt;
*(mxGetPr(prhs[0])) will give you access to the value of this double  &lt;br&gt;
pointer (the value of MATLAB matrix type). You can then overwrite it with  &lt;br&gt;
x since the data type now match.&lt;br&gt;
&lt;br&gt;
hth</description>
    </item>
    <item>
      <pubDate>Wed, 04 Mar 2009 17:37:02 -0500</pubDate>
      <title>Re: mex file wrapper for dll needing function handle</title>
      <link>http://www.mathworks.com/matlabcentral/newsreader/view_thread/245749#632514</link>
      <author>Todd Welti</author>
      <description>&quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message &amp;lt;op.up9rjmqpa5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; On Tue, 03 Mar 2009 23:11:01 -0500, Todd Welti &amp;lt;twelti@harman.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; &amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message  &lt;br&gt;
&amp;gt; &amp;gt; &amp;lt;op.up8j75y1a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; On Tue, 03 Mar 2009 16:19:03 -0500, James Tursa&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;lt;aclassyguywithaknotac@hotmail.com&amp;gt; wrote:&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; &quot;Ashish Uthama&quot; &amp;lt;first.last@mathworks.com&amp;gt; wrote in message&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; &amp;lt;op.up8he7c6a5ziv5@uthamaa.dhcp.mathworks.com&amp;gt;...&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; mxCreateScalar will help you convert a double to a mxArray.&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; //air code!&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; mxArray* prhs[3];&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; mwSize dims[2]={ 1 1};&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; prhs[0]=mxCreateNumericArray(2,&amp;dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; mexGetPr(prhs[0])=x;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt; //..so on for y and z&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; Couple of typos. Since dims is an array, it will act as a double *  &lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; when&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; passed, so you don't need the &amp;dims in the call, just dims. And you  &lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; are&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; missing a comma in the dims initialization. Also, mxGetPr returns a&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; pointer result that is not an lvalue. You need to dereference it for  &lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; the&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; assignment. e.g.&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;  mxArray* prhs[3];&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;  mwSize dims[2]={ 1, 1};&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;  prhs[0]=mxCreateNumericArray(2,dims, mxDOUBLE_CLASS,mxREAL);&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;  *(mexGetPr(prhs[0])) = x;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; Or, as you almost pointed out, you can use mxCreateDoubleScalar for  &lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; this:&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; prhs[0] = mxCreateDoubleScalar(x);&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; &amp;gt; James Tursa&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt;&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; not typos..but plain errors :)&lt;br&gt;
&amp;gt; &amp;gt;&amp;gt; thanks for the corrections.&lt;br&gt;
&amp;gt; &amp;gt;&lt;br&gt;
&amp;gt; &amp;gt; Why do you ahve to use the *(mexGetPr())?  Isn't prhs already a  &lt;br&gt;
&amp;gt; &amp;gt; pointer?  Why can't you use *prhs[0]?&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; The return type of mxCreateNumericArray is mxArray *&lt;br&gt;
&amp;gt; prhs[0] is mxArray *  (think of an mxArray as a structure which represents  &lt;br&gt;
&amp;gt; the MATLAB matrix type in C)&lt;br&gt;
&amp;gt; x is of type double.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; To bridge this gap, use this function:&lt;br&gt;
&amp;gt;      double *mxGetPr(const mxArray *pm);&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; mxGetPr(prhs[0]) will give you a double pointer&lt;br&gt;
&amp;gt; *(mxGetPr(prhs[0])) will give you access to the value of this double  &lt;br&gt;
&amp;gt; pointer (the value of MATLAB matrix type). You can then overwrite it with  &lt;br&gt;
&amp;gt; x since the data type now match.&lt;br&gt;
&amp;gt; &lt;br&gt;
&amp;gt; hth&lt;br&gt;
&amp;gt; &lt;br&gt;
I think I get it. &lt;br&gt;
mxArray* prhs is a pointer to an mxArray, not the real data in it.&lt;br&gt;
&lt;br&gt;
That would explain why my other attempt:&lt;br&gt;
&lt;br&gt;
prhs[0] = &amp;x;&lt;br&gt;
&lt;br&gt;
didnt' work either.&lt;br&gt;
Thanks</description>
    </item>
  </channel>
</rss>

