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.
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.
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.
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.
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...
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!
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.