Ich versuche, eine einfache Mex-Funktion zu schreiben. Ich habe eine ganzzahlige Eingabe, die die Anzahl meiner Objekte ist. Wenn ich myMEX_1.cpp
kompilieren und von MATLAB mit jedem Eingabewert nennen, habe ich immer:Verwenden von mxGetPr vs mxGetData
Anzahl der gewünschten Objekte: = 0
Aber die myMEX_2.cpp
funktioniert gut und zeigen die Anzahl eingegeben von MATLAB Befehlsfenster. Wo ist mein Fehler in myMEX_1.cpp
?
Meine Umgebung: MATLAB R2013a und Microsoft SDK 7.1 Compiler.
// myMEX_1.cpp
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
char str11[100];
unsigned short frameCount;
//unsigned short *frameCountPtr;
frameCount = (*((unsigned short*)mxGetData(prhs[0])));
sprintf(str11, "Number of Requested Objects := %d:\n", frameCount);
mexPrintf(str11);
}
// myMEX_2.cpp
#include "mex.h"
void mexFunction(int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
char str11[100];
unsigned short frameCount;
double* dblPointer;
dblPointer = mxGetPr(prhs[0]);
frameCount = (unsigned short)(*dblPointer);
sprintf(str11, "Number of Requested Objects := %d:\n", frameCount);
mexPrintf(str11);
}
'mxGetPr' gibt immer' * double' zurück, unabhängig vom Typ des Eingabearguments. – GntS
@GmtK Ich dachte, dass ich das nur überprüft habe. Obwohl Ihr Code funktioniert, wenn Sie * wirklich * eine Ganzzahl übergeben: 'myMEX_1 (uint16 (1))' – Suever
Der Funktionsprototyp wird in der MATLAB-Hilfe als 'double * mxGetPr (const mxArray * pm);' – GntS