|
|
Matlab Coder - Implementierung in C++ |
|
lcalert |
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 04.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.08.2014, 11:50
Titel: Matlab Coder - Implementierung in C++
|
|
|
|
|
Hallo,
zugegebenermaßen, ich habe eigentlich eher eine C++ Frage, als eine direkte Matlab Frage. Hoffe hier jedoch auf hilfreiche Hinweise, ist schwer dazu Informationen bei google zu finden. Dort werden immer nur C++ Probleme behandelt, nicht die Implementierung aus Matlab.
Ich habe ein Matlab Skript, welches als Input 3 Vektoren hat und als Output einen Vektor und ein Skalar liefert. (Das Skript berechnet die Parametrisierung nach der Bogenlänge anhand eines 3D Polygonzuges, das Skalar ist eine Errorrückmeldung).
Jetzt habe ich das mittels dem 'coder' in C++ übersetzt und in C++ implementiert.
Funktioniert für die Vektoren wunderbar, nur bei dem zusätzlichen Skalar kommt immer ein Fehler, weil ich auf geschützten Speicher zugreifen möchte.
Denn wenn ich die Errorrückmeldung in Matlab nicht in den Output packe, dann funktioniert das genau wie ich es haben will in C++. Also muss es da irgendwie haken, aber C++ seitig. In Matlab funktionierts alles bestens.
Meine Frage an die Matlab Gemeinschaft wäre jetzt, hat jemand schon Erfahrungen mit der Implementierung gemacht und vielleicht ein gutes Tutorial oder einen grundlegenden Tipp parat?
Oder weiß sogar jemand, wo der Fehler in meinem C++-Code liegt?
Achtung C++-Code!
[code]#include "stdafx.h"
#include <iostream>
#include "arcl3d.h"
#include "arcl3d_initialize.h"
#include "arcl3d_terminate.h"
#include "arcl3d_emxAPI.h"
#include "arcl3d_emxutil.h"
using namespace System;
int main( )
{
arcl3d_initialize();
double a[6] = {0, 1, 2, 3, 4, 5};
double b[6] = {0, 2, 4, 6, 8, 10};
double c[6] = {0, 1, 2, 3, 4, 5};
double d[6] = { };
double *ier;
emxArray_real_T *input1, *input2, *input3, *output;
input1 = emxCreateWrapper_real_T(a, 1, 6);
input2 = emxCreateWrapper_real_T(b, 1, 6);
input3 = emxCreateWrapper_real_T(c, 1, 6);
output = emxCreateWrapper_real_T(d, 1, 6);
arcl3d(input1, input2, input3, output, ier);
for(int i = 0; i < 6; ++i) {
std::cout << d[i] << "\n";
}
arcl3d_terminate();
return 0;
}[\code]
Fehler ist:
Eine nicht behandelte Ausnahme des Typs "System.AccessViolationException" ist in ConsoleApplication.exe aufgetreten.
Zusätzliche Informationen: Es wurde versucht, im geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass anderer Speicher beschädigt ist.
Dieser tritt bei der Ausführung der Methode "arcl3d" auf.
Vielen Dank schonmal und viele Grüße!
|
|
|
|
|
lcalert |
Themenstarter
Forum-Newbie
|
|
Beiträge: 2
|
|
|
|
Anmeldedatum: 04.08.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.08.2014, 13:06
Titel:
|
|
Habs mittlerweile selbst gelöst.
Hab den Matlab Compiler genutzt, aufgerufen mittels Deploytool, dann auf Shard Library C++. Danach dann in C++ mit mxArrays gearbeitet, dazu findet man einiges in der Hilfe.
Nur so für Leute, die evtl. hiernach suchen und damit keiner mehr helfen braucht !
Danke trotzdem!
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|