mikrocontroller.net

Forum: PC-Programmierung Verständnisfrage zu DLLs mit Matlab


Autor: Matlabprogrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich arbeite derzeit an diversen Algorithmen in Matlab die später in eine 
DLL portiert, gesteckt, oder wie man das nennen will, werden. Ich habe 
durch recherchieren im Internet erfahren, dass ich aus den Matlabfiles 
eine DLL generieren kann. Diese kann ich dann in C/C++/C# aufrufen und 
kann die Matlab Funktionen verwenden.

Ich verstehe allerdings nicht wie ein C Programm auf die DLLs zugreift 
wenn in dieser Matalbfunktionen beinhaltet sind. Ich könnte mir 
vorstellen das: a) In dieser DLL der Matlabinterpreter mit drinsteckt 
und das C-file den Matalb Code somit versteht oder b) wenn Matlab die 
m-file in deine DLL wandelt, dass es dann in eine Art einheitlichen 
Maschinencode gewandelt wird. Ist irgendeine dieser Denkweise richtig? 
Falls nicht? Wie funktioniert das dann?

Eine zweite Frage ist: Wenn ich in Matlab eine DLL aus meinem m-file 
erstelle, gibt es überhaupt eine Möglichkeit diese DLL ohne ein 
drumherum gebautes C-Programm zu verwenden ? Als Alternative könnte ich 
eine GUI machen und mit MCR (Matlab Compiler Runtime?) an einem anderen 
PC zum laufen bringen. Aber später soll alles auf eine DLL rauslaufen.

Ich hoffe es kann mir jemand helfen oder zumindest mich auf einen Link 
verweisen wo ich mich einlesen kann. In der Matlab Doku stehen solche 
Einzelheiten natürlich nicht.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das steht auch nicht im "Matlab Application Program Interface Guide"?

Zumindest steht da, wie man 1) die DLL schreibt, die von Matlab
aus aufgerufen werden kann, und 2) wie man ein C-Programm schreibt,
das andersrum Matlab-Funktionen nutzt.

Eine selbstgeschriebene Funktion in einer DLL wird ja von Matlab
aus wie jede andere aus aufgerufen.
Ich denke, daß man eine selbstgeschriebene Funktion (siehe 1)
dann auch von einem Programm (siehe 2) wie gewohnt aufruft.

Ansonsten spricht doch nichts dagegen, die Funktionen in 1
direkt von 2 aus aufzurufen wie bei jeder anderen DLL.

Autor: Matlabprogrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mir ist auch klar wie ich von Matlab oder von C eine DLL aufrufe. Das 
war nicht meine Frage. Ich möchte gerne wissen wie es im inneren der 
DLLs aussieht. C hat ja ne andere Syntax als Matlab von daher weiß ich 
nicht wie das zusammenspiel hier funktionieren kann.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das steht alles in besagtem Buch, zumindest habe ich das vor etlichen
Jahren mal danach gemacht und hatte geklappt.

Ich habe es hier nicht mehr installiert, aber ich gehe doch schwer
davon aus, daß es in der Online-Hilfe auch drin ist?

Ein Beispiel könnte ich dir notfalls rauskramen, aber da gibt
es von Matlab doch auch reichlich?

Das einzige Brisante ist doch die Parameterübergabe beim Aufruf
einer Funktion, da muß man sich halt strikt an die Vorgabe halten.

Untendrunter hat man dann wieder freie Bahn.
Außer malloc(), das musste man gegen eine Matlab-Funktion
ersetzen, wenn ich mich recht entsinne.

Autor: Matlabprogrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube Ihr versteht mich nicht ganz :-) ich habe keine Probleme mit 
der Realisierung dieser Aufgabe. Ich verstehe einfach den Hintergrund 
nicht wie das funktionieren kann, dass in matlab.dll ein code drinsteht 
der in der matlab "sprache" geschrieben ist und ich dann ein c++ 
programm schreibe, dass ja eine ganz andere Syntax hat diese matlab.dll 
verwenden kann. Ganz einfach gesagt: Das C++ Programm versteht doch die 
Sprache von Matlab nicht.
Steckt in der DLL eine "allgemeine Sprache" oder wie funktioniert das 
genau?

Nochmal :-) Ich weiß wie ich DLLs einbinde bzw. erstelle. Ich verstehe 
nur den Hintergrund der Kommunikation der beiden Files nicht...

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Frag mal Mathworks, vielleicht sagen sie es Dir ;)
Die beiden prinzipiellen Möglichkeiten hast Du schon genannt:
- Matlab code mit Interpreter (braucht so eine Matlab DLL die Matlab 
Runtime?)
- Maschinencode

Mein Tipp geht in Richtung der ersten Möglichkeit, weil die sonst arge 
Probleme mit Sachen wie eval() bekommen würden!

Autor: unwissender (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die DLL wird doch durch einen Compiler erstellt. Dort ist dann nichts 
mehr mit "Matlab Syntax". In der DLL ist hardware naher ausführbarer 
Maschinencode. Die Quellsprache ist eigentlich total egal.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das, was du als Matlabsprache bezeichnest, wird halt über
Funktionsaufrufe an Routinen übergeben, die aus einer Lib
dazu gelinkt werden. Und die ist, wenn du so willst, ein
Matlabinterpreter.

Das Matlab, was man sonst manuell bedient, ist letztlich auch
nur eine GUI für dieselbe Lib.

Autor: Matlabprogrammierer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann sag ich mal: Vielen Dank :)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matlabprogrammierer schrieb:

> Steckt in der DLL eine "allgemeine Sprache" oder wie funktioniert das
> genau?

Gegenfrage:
Wenn du deine DLL auslieferst, brauchst du dann noch eine 
Matlab-spezifische DLL zusätzlich mit dazu?
Wenn ja, dann steckt dort der Interpreter bzw. die Matlab-Runtime (wie 
auch immer die realisiert ist) drinnen. Auch ein Interpreter ist ja im 
Grunde nichts anderes als ein Verteiler für Funktionsaufrufe.

Matlab wird deine von dir geschrieben Funktion höchst-wahrscheinlich 
vor'kompilieren', also die Syntaxprüfung machen und deinen Matlab Code 
in entsprechende Funktionsaufrufe dieser Runtime umsetzen. Das ganze 
dann in eine Funktion verpackt, sodass sich die Funktion nach aussen wie 
jede andere Funktion über DLL-Grenzen hinweg ansprechen lässt und fertig 
ist die Laube.

Zumindest so würde ich das machen.

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, wobei Matlab nicht direkt (vor-)kompiliert.
Man schreibt seinen Quelltext in C oder Fortran, zudem muß
ein passender Matlab-genehmer Compiler vorhanden sein, je
nach OS.
Kompiliert wird dann mit einem Skript, das je nach OS dann
den Compiler aufruft, den Linker mit der passenden Lib
füttert und heraus kommt die DLL, die die Matlab-Routinen
durch die Lib enthält.
Das Erzeugen sieht damit OS-unabhängig aus.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.