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


von Matlabprogrammierer (Gast)


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.

von Klaus W. (mfgkw)


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.

von Matlabprogrammierer (Gast)


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.

von Klaus W. (mfgkw)


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.

von Matlabprogrammierer (Gast)


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...

von Karl (Gast)


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!

von unwissender (Gast)


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.

von Klaus W. (mfgkw)


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.

von Matlabprogrammierer (Gast)


Lesenswert?

Dann sag ich mal: Vielen Dank :)

von Karl H. (kbuchegg)


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.

von Klaus W. (mfgkw)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.