Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

NukeNoob

Frischling

  • »NukeNoob« ist der Autor dieses Themas

Beiträge: 48

Beruf: Student

  • Private Nachricht senden

1

17.12.2014, 23:15

[Erledigt] Plotten mit MATLAB in Visual Studio und C++ -> DLL Fehler

Moin!
Ich versuche fieberhaft, folgendes Programm zum laufen zu bringen:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <engine.h>
#include <string>
#include <cmath>
  

int main ()
{
    /* MATLAB initialisieren */
    Engine *pEngine = NULL;
    pEngine = engOpen ("null");

    /* Arrays erstellen */
    const int arraySize = 1000;
    const double degToRad = 0.0174;

    double SinArray[arraySize] = { 0 };
    double CosArray[arraySize] = { 0 };
    double DegArray[arraySize] = { 0 };

    for (int i = 0; i < arraySize; i++)
    {
        DegArray[i] = i;                    // Grad hochzählen
        SinArray[i] = sin(i*degToRad);      // Sinuswerte als RAD
        CosArray[i] = cos(i*degToRad);      // Cosinuswerte als RAD
    }

    /* Daten an MATLAB senden */
    /* Datenarray als DoubleMatrix übergeben, 1-D mit Länge arraySize */
    mxArray *pSin = mxCreateDoubleMatrix (arraySize, 1, mxREAL);

    /* pSin Zeiger erstellen, welcher auf Array zeigt und Größe in Bits übergeben */
    memcpy ((void*)mxGetPr (pSin), (void*)SinArray, sizeof (double) * arraySize);
    
    /* Übergibt Matrix an MATLAB über die MATLAB-Engine, mit Alias "SinGraph" */
    engPutVariable (pEngine, "SinGraph", pSin);

    /* Das gleiche für die Cosinus Werte */
    mxArray *pCos = mxCreateDoubleMatrix (arraySize, 1, mxREAL);
    memcpy ((void*)mxGetPr (pCos), (void*)SinArray, sizeof (double) * arraySize);
    engPutVariable (pEngine, "CosGraph", pCos);

    /* Sowie Grad Werte*/
    mxArray *pDeg = mxCreateDoubleMatrix (arraySize, 1, mxREAL);
    memcpy ((void*)mxGetPr (pDeg), (void*)SinArray, sizeof (double) * arraySize);
    engPutVariable (pEngine, "DegGraph", pDeg);

    /* MATLAB Figure-Fenster öffnen */
    engEvalString (pEngine, "figure('units', 'normalized', 'outerposition', [0 0 1 1]),");
    engEvalString (pEngine, "plot (DegGraph, SinGraph, 'r', DegGraph, CosGraph, 'b'), grid minor, title ('Mein MATLAB Plot'),");

    return (0);
}


Ich bekomme leider, egal was ich tue, einen DLL Fehler. Mir ist bewusst, dass man auch MEX Files nutzen kann, um MATLAB mit C/C++ nutzbar zu machen. Ich wundere mich trotzdem, warum es so nicht funktioniert...
Fehler:

Zitat

"The program can't start because libeng.dll is missing from your computer. Try reinstalling the program to fix this problem.

Selbstverständlich habe ich alle zusätzlichen benötigten Verzeichnisse mit richtigen Pfaden angegeben und habe alle benötigten "Zusätzlichen Abhängigkeiten" eingegeben.
Zusätzlich habe ich noch den Pfad von MATLAB, in dem sich die "fehlende" DLL befindet (sie ist da), bei Windows unter "Umgebungsvariablen" und "Path" hinzugefügt.
Habe den PC außerdem mehrfach neugestartet.

Außerdem habe ich es mit der 32-Bit und 64-Bit Version von MATLAB probiert. Beides ohne Erfolg. Hat Jemand eine Idee?

Vielen Dank im voraus! :)


Final Edit:
Alles klar. Ich bin ein bisschen doof ... :dash: Man darf unter "Umgebungsvariablen" und "Path" natürlich nur einen der beiden Pfade angeben, an denen die DLLs exisiteren. D.h. 32-Bit und 64-Bit Version. Nach dem löschen des Pfades der 64-Bit DLLs funktioniert es jetzt!
Hoffe ich habe keinem zu viel Zeit geklaut! :whistling:

Schönen Abend noch

Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von »NukeNoob« (17.12.2014, 23:39)