DLL-Treiber mittels MEX-File unter Matlab einbinden.



  • Hallo,

    erstmal vorweg: Bin blutiger Anfänger und bin mir auch nicht sicher, in welches Forum das hier gehört.

    Folgendes Problem:
    Habe hier einen Laser-Scanner (Computer-steuerbares Spiegelsystem zum ablenken eines Laserstrahls), der mit einer 32-Bit Dll ausgeliefert wurde.

    In der DLL sind mehrere Funktionen und Prozeduren hinterlegt mit denen man den Scanner steuern kann.

    Ich soll nun (arbeite als HiWi an ner Uni) ein MEX-File für Matlab schreiben um von Matlab aus den Scanner steuern zu können, also muss ich in C (evtl. C++) (Matlab hat für die MEX-Files einen C-Compiler integriert) ein kleines Programm schreiben, dass die DLL des Scanners "importiert" und die Funktionen für Matlab zur Verfügung stellt.

    Wie macht man sowas?
    Gibts irgendwo ne "Anelitung" ?

    Vielleicht ein Beispiel in ANSI-C in dem einfach mal ne Windows-DLL verwendet wird (mesagebox oder sowas...)

    Hab zu der DLL keine .h oder .lib Datei... (Braucht man das...??)

    Bin für jede Hilfe dankbar,
    Grüße,
    Johnny



  • Also in ANSI-C gibts keine Möglichkeit, da ANSI-C keine DLLs kennt. Das ist was windowsspezifisches, darum wandert der Thread auch gleich nach diesem Post ins Konsolenforum.

    Da du keine .h und .lib hast, ist das ganze ein wenig umständlicher, als man es normalerweise machen würde. Normalerweise bindest du einfach die .h Datei wie gewohnt mit #include ein verwendest die Funktionen, wie jede andere und gibst dann beim Linken noch die .lib-Datei mit.

    In deinem Fall musst du die WinAPI-Funktion LoadLibrary() verwenden (siehe MSDN) und noch eine Funktion (weiß den Namen grad nicht, sollte aber bei LoadLibrary() drauf verwiesen werden) zum Aufrufen der Funktionen in der DLL. Allerdings musst du wissen, wie die Funktionen in der DLL heißen.



  • Dieser Thread wurde von Moderator/in AJ aus dem Forum ANSI C in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Ich würde mich mal hier umschauen, da findest du bestimmt ein paar gute Beispiele, hier
    die gesamte Dokumentation (pdf).

    Achja, soll das ganze was für Simulink werden? Der Compiler der mit Matlab mitkommt ist der lcc.

    @AJ, wäre "Rund um die Programmierung" nicht passender?



  • @ AJ:
    Danke erstmal für die Hilfe.
    Hab jetzt etwa im MSDN gelesen, komme aber noch nicht wirklich klar.
    Gibts vielleicht ein einfaches beispiel, wo mal eine dll aus windows, zum beispiel explorer öffnen mittels Shell.dll,shellexecute ) aufgerufen wird.

    Welche Headerfiles muss man denn includen um Loadlibrary, etc. verwenden zu können?

    @TactX:
    Werd mich mal umsehen... Nee, erstmal nichts für Simulink (kenn mich damit auch nicht aus...)
    Was sagt mr das mit dem LCC-Compiler..?!? Was muss man da drüber wissen? Kann der C++ und damit diese loadlibrary-geschichte?

    Danke und Grüße,
    Johnny



  • Johnny-G schrieb:

    @TactX:
    Was sagt mr das mit dem LCC-Compiler..?!?

    Das sagt dir, dass es der lcc ist und dass du mit diesem Wissen ein Suchwort für Google hast um compilerspezifische Informationen zu finden 😉



  • Okey, jetzt hab ich ne etwas einfachere Lösung gefunden:

    mit loadlibrary() kannman direkt in Matlab die DLL einbinden allerdings braucht man ein Headerfile, welches ich mir erstellt habe.

    dann kann man mittels calllib auf die Funktionen zugreifen.

    Funktioniert erstmal recht ordentlich.

    Danke für die Hilfe,
    Johnny



  • TactX schrieb:

    @AJ, wäre "Rund um die Programmierung" nicht passender?

    Finde ich eher nicht. Das WinAPI-Forum wäre noch passend gewesen, aber da hier schon mal LoadLibrary() vorgekommen ist und im Konsolenforum öffter mal WinAPIs verwendet werden...

    Wenn es nur um das Matlab ginge, dann würde ich dir recht geben ;).

    @Johny-G
    Für LoadLibrary() musst du eigentlich nur die windows.h einbinden; das dürfte aber auch in der MSDN bei LoadLibrary() stehen.



  • Hallo zusammen!
    Wow, 7 Jahre alt und trotzdem immer noch aktuell 😉

    AJ schrieb:

    Da du keine .h und .lib hast, ist das ganze ein wenig umständlicher, als man es normalerweise machen würde. Normalerweise bindest du einfach die .h Datei wie gewohnt mit #include ein verwendest die Funktionen, wie jede andere und gibst dann beim Linken noch die .lib-Datei mit.

    Gibt es eine Möglichkeit, die .lib-Datei direkt in MATLAB zu nutzen?

    Okey, jetzt hab ich ne etwas einfachere Lösung gefunden:

    mit loadlibrary() kannman direkt in Matlab die DLL einbinden allerdings braucht man ein Headerfile, welches ich mir erstellt habe.

    dann kann man mittels calllib auf die Funktionen zugreifen.

    Funktioniert erstmal recht ordentlich.

    Wie hast du dir das Headerfile denn erstellt, das du für MATLAB brauchst?

    Gruß
    Chris