Wie Sie ausgeführt werden .exe-Programme übergeben Variablen aus dem Matlab-workspace?

Ich 'm arbeiten auf ein Matlab-Projekt, das erfordert, dass große Daten-Verarbeitung und einige Teile des Codes müssen, um schneller zu laufen als Matlab-Funktionen. Für diesen Zweck muss ich anrufen ein .exe in andere Scripte übergeben Variablen aus dem workspace. Um zu verstehen, wie ich das lösen könnte, dass ein kleines Zusatz-Programm.

Ich habe den folgenden code

function test(a,b)
if ischar(a)
  a2=str2num(a);
else
  a2=a;
end
if ischar(b)
  b2=str2num(b);
else
  b2=b;
end
res=a2+b2;
disp(res)

und ich das deployment-tool, um es ausführbar machen.
Wenn ich laufen die test.exe durch matlab mit !test.exe 5 3 es funktioniert,
Wenn ich zwei Variablen a=5 und b=3 und versuchen Sie es !test.exe a b es funktioniert nicht.

Weiß ich, dass ich übergeben Sie die Variablen ein .txt-oder .dat-Datei und dann schließen und neu eröffnet
wieder durch das Programm (die Variablen, die ich verwenden müssen, die dynamisch sind), aber ich glaube nicht, dass seine effizienter als mfile laden von Variablen aus workspace.

Ich suchte auch über die Verwendung varargin,nargin etc. aber diese Befehle nicht über die Verwendung von argc[], argv[] C. so Etwas wie, dass könnte es lösen meiner Probleme.

Dann Suche ich für mex-Dateien und schreiben Sie den folgenden code:

#include "mex.h"

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
{
   mxArray *mexGetVariable(const char *workspace, const char *varname);

   const mxArray *mex_a;
   const mxArray *mex_b;

   //http://www.mathworks.com/help/techdoc/apiref/mexgetvariable.html
   if ((mex_a = mexGetVariable("a", "global"))==NULL)
   {
        mexErrMsgTxt("Variable 'a' not in workspace.");
   }
   else if ((mex_b = mexGetVariable("b", "global"))==NULL)
   {
        mexErrMsgTxt("Variable 'b' not in workspace.");
   }
   else
   {
        mexEvalString("!test.exe mex_a mex_b"); 
   }
} 

(Habe ich auch übergeben Sie die variable a=5 b=3), Aber nichts funktionierte, wie ich eine Eingabeaufforderung zu sagen
Die Variable a nicht in den Arbeitsbereich.

Kann jemand mir eine code-Lösung, wie kann ich das machen .exe-Programme das Lesen der Variablen aus dem matlab-workspace ohne Sie zu öffnen .txt-oder .dat-Dateien?

Vielen Dank im Voraus für Ihre Freundlichkeit bei der Lektüre mein Thema.

InformationsquelleAutor George | 2012-06-19

Schreibe einen Kommentar