WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

.DLL in Matlab verwenden

 

SingleLineSweep
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.10.16
Wohnort: München
Version: ---
     Beitrag Verfasst am: 07.11.2016, 15:41     Titel: .DLL in Matlab verwenden
  Antworten mit Zitat      
Hallo zusammen,

ich habe mir in C++ eine DLL für ein Projekt in MATLAB geschrieben. Diese DLL möchte ich nun in MATLAB einbinden und nutzen. Laut MATLAB gibt es hierfür die Funktion loadlibrary(). Ich bekomme es allerdings leider nicht hin meine geschriebene DLL und das dazugehörige headerfile zu laden.

Genauso wie in dem von Mathworks angebotenem example (der "shrlibsample") habe ich es versucht nachzuvollziehen, doch bin ich leider nicht zu einem Ergebnis gekommen. Hat MATLAB irgendwelche Gesetze oder Richtlinien an die man sich bei der Erstellung der .dll halten muss? Das Headerfile liegt im gleichen Ordner wie das .dll-File.

Code:

loadlibrary('MathLibrary','MathLibrary.h')
 


Anbei auch noch die Fehlermeldung:

Code:

Error using loadlibrary
Building MathLibrary_thunk_pcwin64 failed.  Compiler output is:
cl -I"C:\Users\Desktop\Build DLL" -I"C:\Program Files\MATLAB\R2016a\64\extern\include" /Zp8  /W3  /nologo
-I"C:\Users\Desktop\DllTest" -I"C:\Users\Desktop\Build DLL" "MathLibrary_thunk_pcwin64.c" -LD
-Fe"MathLibrary_thunk_pcwin64.dll"
MathLibrary_thunk_pcwin64.c
C:\Users\Desktop\Build DLL\MathLibrary.h(8): error C2061: syntax error: identifier 'MathLibrary'
C:\Users\Desktop\Build DLL\MathLibrary.h(8): error C2059: syntax error: ';'
C:\Users\Desktop\Build DLL\MathLibrary.h(9): error C2449: found '{' at file scope (missing function header?)
C:\Users\Desktop\Build DLL\MathLibrary.h(23): error C2059: syntax error: '}'
 


Das seltsame ist er sagt mir hier es gäbe Probleme beim compilieren? Aber wenn ich die .dll über C# oder C++ Projekte aufrufe gibt es keine Probleme.

Vielen Dank für eure Unterstützung
_________________

Das Spektrum einer Frequenz ist ja wundervoll!

Zuletzt bearbeitet von SingleLineSweep am 07.11.2016, 15:47, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.11.2016, 15:45     Titel: Re: .DLL in Matlab verwenden
  Antworten mit Zitat      
Hallo SingleLineSweep,

Die Fehlermeldung spricht von Syntax-Fehlern in den Zeilen 8, 9 und 23. Sind diese Zeilen okay?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
SingleLineSweep
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.10.16
Wohnort: München
Version: ---
     Beitrag Verfasst am: 07.11.2016, 15:49     Titel:
  Antworten mit Zitat      
Ja sind sie. Habe keine Probleme die *.dll über andere Programmiersprachen anzusprechen und die Funktionen aufzurufen.
_________________

Das Spektrum einer Frequenz ist ja wundervoll!
Private Nachricht senden Benutzer-Profile anzeigen
 
SingleLineSweep
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.10.16
Wohnort: München
Version: ---
     Beitrag Verfasst am: 07.11.2016, 15:53     Titel: Re: .DLL in Matlab verwenden
  Antworten mit Zitat      
Hier noch der Code von meinem Header und meiner dllmain.cpp.

Code:
#include "stdafx.h"

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved
                )
{
   switch (ul_reason_for_call)
   {
   case DLL_PROCESS_ATTACH:
   case DLL_THREAD_ATTACH:
   case DLL_THREAD_DETACH:
   case DLL_PROCESS_DETACH:
      break;
   }
   return TRUE;
}


Code:
#include "stdafx.h"
#include "MathLibrary.h"

namespace MathLibrary
{
    double Functions::Add(double a, double b)
    {
        return a + b;
    }

    double Functions::Multiply(double a, double b)
    {
        return a * b;
    }

    double Functions::Addmultiply(double a, double b)
    {
        return a * (a + b);
    }
}

_________________

Das Spektrum einer Frequenz ist ja wundervoll!
Private Nachricht senden Benutzer-Profile anzeigen
 
SingleLineSweep
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.10.16
Wohnort: München
Version: ---
     Beitrag Verfasst am: 07.11.2016, 16:24     Titel: Re: .DLL in Matlab verwenden
  Antworten mit Zitat      
Hallo zusammen,

ich habe das Problem bereits gelöst. Matlab ist nicht in der lage mit C++ *.dlls zu arbeiten. Habe nun die *.dll in native C geschrieben. Funktioniert nun einwandfrei!

Sorry für die Umstände!
_________________

Das Spektrum einer Frequenz ist ja wundervoll!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 07.11.2016, 17:25     Titel: Re: .DLL in Matlab verwenden
  Antworten mit Zitat      
Hallo SingleLineSweep,

Gemäß der Dokumentation akzeptiert Matlab auch C++ DLLs: https://www.mathworks.com/help/matlab/ref/loadlibrary.html

Ist dies die Zeile 8:
Code:
switch (ul_reason_for_call)

Die passt nicht zur Meldung "MathLibrary.h(8): error C2061: syntax error: identifier 'MathLibrary' "

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
SingleLineSweep
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 11.10.16
Wohnort: München
Version: ---
     Beitrag Verfasst am: 08.11.2016, 11:03     Titel: Re: .DLL in Matlab verwenden
  Antworten mit Zitat      
Ja, ich habe mich wohl falsch ausgedrückt.
Was ich meinte ist, dass es nicht möglich ist ohne eine C-Schnittstelle bereitzustellen eine DLL zu laden. laut Matlab Doku:

Zitat:
Functions written in C++ must be declared as extern "C".


Wenn man also auf die Verwendung von Namespaces und Klassen verzichtet funktioniert es.
_________________

Das Spektrum einer Frequenz ist ja wundervoll!
Private Nachricht senden Benutzer-Profile anzeigen
 
pete10

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.05.2019, 13:21     Titel: Dll in Matlab verwenden
  Antworten mit Zitat      
Hallo,

der Beitrag ist zwar schon 3 Jahre alt, aber ich versuche mal mein Glück. Ich bin noch ein Programmieranfänger muss aber auch eine C++ .dll über Matlab aufrufen. Die .dll habe ich gebaut (auch die MathLibrary). Muss ich noch irgednetwas beachten bevor ich den Befehl loadlibrary benutze? Aus den Docs auf der MatLab Seite werde ich leider nicht schlau :/ Crying or Very sad Crying or Very sad

Ich hoffe ihr könnt mir weiterhelfen. Smile

Viele Grüße und besten Dank im Voraus.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.