WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Matlab integration in c++ -> speicher zugriffsverletzung

 

MB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.02.2010, 19:17     Titel: Matlab integration in c++ -> speicher zugriffsverletzung
  Antworten mit Zitat      
Hallo,

ich habe ein kleines problem mit meinem Testprogramm, was einfach ein kleines (umgewandeltes) Matlab-script ausführen soll.

Ich habe das kleine Script:
Code:

function test3()
x=str2num('2');
y=str2num('5');
a = x + y;
z=[0:0.1:1];
plot(z.^2);
tmp = num2str(a);
disp(['a = ' tmp])
 


mit dem lcc in einfache c- dateien umgewandelt und diese mit dem visualstudio in eine lib compiliert. das einhängen von der lib geht auch. nur habe ich zu laufzeit des programmes das problem, das mit der ausführung eine speicher-zugriffs-verletzung bring:

hier der Fehler: "Unhandled exception at 0x00000000 in konsole.exe: 0xC0000005: Access violation."

Das Programm dazu sieht so aus:
Code:

#include "test3.h"
#include "C:\Program Files\MATLAB\MATLAB Component Runtime\v75\extern\include\mclmcr.h"
#include "c:\Program Files\MATLAB\MATLAB Component Runtime\v75\extern\include\matrix.h"
#include "c:\Program Files\MATLAB\MATLAB Component Runtime\v75\extern\include\mex.h"
#include "c:\Program Files\MATLAB\MATLAB Component Runtime\v75\extern\include\engine.h"

int _tmain(int argc, _TCHAR* argv[])
{
   Engine *ep;
   if (!(ep = engOpen("\0"))) {
      fprintf(stderr, "\nCan't start MATLAB engine\n");
      return EXIT_FAILURE;
   }
   //const mwSize size = (mwSize)8;
   mxArray *arrayA[2],*arrayB[2];
   //arrayA = NULL;
   //arrayA = mxCreateStringFromNChars("2",size);//mxCreateDoubleMatrix(1,1,mxREAL);
   //mxArray *arrayB = //mxCreateString("1");
   
   arrayB[0]=mxCreateString("1");
   arrayB[1]=mxCreateString("3");

//   mlfTest3();

   engClose(ep);

   //mlfTest3((mxArray *)"1",(mxArray *)"1");
   
   //mxDestroyArray(arrayB[0]);
   //mxDestroyArray(arrayB[1]);
   return 0;
}
 


das Programm lässt sich ohne probleme kompilieren. zum schluss soll das programm die "mlfTest3()" oder die "mlxTest3(1,arrayA,0,arryB)" ausfürhen und somit das script.

der Fehler tritt immer in der Zeile mir: "arrayB[0]=mxCreateString("1"); " auf (laut Debuger)

schonmal im vorhinein danke für eure hilfe.

MB


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 12.02.2010, 21:44     Titel:
  Antworten mit Zitat      
Ich bin erstaunt, dass man
Zitat:
mit dem lcc in einfache c- dateien umgewandelt
. Dann werden noch Dateien der "MATLAB Component Runtime" inkludiert. Also, wird jetzt mit dem "MATLAB Compiler" gearbeitet oder nicht?? Wenn ja, wären diese Arbeitsschritte relevant.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.02.2010, 22:10     Titel:
  Antworten mit Zitat      
Hallo,

ich vermute, es geht um Engine Applications. Hast du mal das Beispiel aus der Doku durchprobiert?
http://www.mathworks.com/access/hel.....ternal/f15075.html#f25603

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MB

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.02.2010, 09:14     Titel:
  Antworten mit Zitat      
Hallo

Ich habe jetzt das Beispiel getestet und muss leider sagen, dass es das gleiche Ergebniss bringt, wie meine ursprünliche Anwendung. Die Matlab-engine startet noch ohne Probleme aber wie auch vorher ist der fehler beim Array und (wie im Beispiel) der initialisierung mit mxCreateDoubleMatrix(...).

Ich benutze zu zeit zum Kompilieren und Testen die Beta 2 vom VS2010 habe es aber auch schon unter VS2008 verzucht und zu keinem anderen Ergebnis gekommen.

Danke
MB
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.449
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.02.2010, 10:59     Titel:
  Antworten mit Zitat      
Hallo,

und welche MATLAB-Version verwendest du?
Dass dass Beispiel nicht funktioniert, legt nahe, dass es nicht an deinem Programm liegt.
Hast du beim Kompilieren das richtige Options File gewählt? Ich habe Zweifel, dass überhaupt eines für VS2010 enthalten ist, da dieser Compiler noch gar nicht unterstützt wird. Siehe
http://www.mathworks.com/access/hel.....tlab_external/f39903.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.