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:
"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 ...
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!
Schönen Abend noch