Hogyan készítsünk matlabot és vizuális c-t? Mindent elmondunk a weboldalak létrehozásáról és reklámozásáról (és egy kicsit arról
Problémám van a munkahelyemen. Szükséges a Matlab és a Visual C ++ interfészeinek kombinálása. Ugyanakkor szükséges, hogy a kapott szoftver olyan számítógépeken dolgozzon, ahol a matlab nincs telepítve. (Azonnal foglalok helyet, hogy a kiadási verzió elkészítése előtt még túl korai 🙂).
Prykskav a helyszínen fejlesztők Matalaba kiderül, hogy ezek a rendszerek lehet barátok három módon:
- Hozzon létre egy független alkalmazást a Mathlabban és csatlakoztassa a C ++-hoz;
- Használd a Matlab Engine-t (nem akartalak kipróbálni ezt a módszert, de nem mentem később.) Később megtaláltam a fejlesztők webhelyén, hogy ezt a szolgáltatást eltávolították a MathLab új verziójában.
- Hozzon létre egy dinamikus könyvtárat (dll), majd használja azt C ++-ban;
A harmadik útra fogunk menni, mivel ez a leglogikusabb.
Egy kicsit tanulunk a matlabról. Korábban együtt dolgoztam vele az egyetemen, így minden gyorsan eszembe jutott. A kezdőknek pedig a legalapvetőbbeket fogom adni:
A Mathlab-ban írhatsz úgynevezett szkripteket és funkciókat. Elvben különböznek egymástól. A függvények más funkcióktól hívhatók meg, a szkriptek pedig nem. Ezért a dll fordításakor funkciókat kell használni, nem szkripteket!
Létrehozzuk a legegyszerűbb funkciót: m-file. a rögzített érték szinuszának kiszámítása.
függvény s = sinus ()
s = sin (2);
Nyomja meg az F5 billentyűt, és élvezze az ans = 0.9093 értéket a parancsablakban. Művek!
Először be kell állítania a Matlab Compiler programot. Van elég leírnivaló a hangoláshoz, ezért nem figyelünk rá. Jobban mennünk tovább.
A parancsablakban írja be a Deploytool parancsot, és nyomja meg az Enter billentyűt. Van valami ilyesmi:
Nyomja meg az új projekt ikonját, válassza a C ++ Shared könyvtár lehetőséget
Az alján írja be a nevet (ezt ajánlom, különben megzavarodhatsz), és nyomd meg az OK gombot
Magunk előtt három mappát látunk. Most az exportált funkciók iránt érdeklődünk. Hozzáadjuk az m-file-ot szinuszhoz és nyomjuk meg a build () -et.
Várjuk, hogy a könyvtár találkozzon. Nem gyűlik össze nagyon gyorsan. Itt az ideje pihenni.
Könyvtárunk gyűlt össze. A projekt mappájába megyünk, és látunk két tátyát: / distrib és / src. Könnyű kitalálni, hogy érdekli őket az első.
A mappában öt fájlt látunk. A readme.txt egyáltalán nem érdekel. A hasznos információkat általában nem írták le)))
* .dll, * .lib, * .h azok a fájlok, amelyekkel dolgozni fogunk.
Itt az ideje, hogy egy projektet készítsen a Visual C ++ számára.
Általában a könyvekben írni a projektek létrehozása a konzol alatt. Mi azonnal megyünk egy kést a tartályba és létrehoztuk az MFC alkalmazást. Interaktív legyen (éppen ezért akartam).
A legnehezebb a projekt létrehozása során. Mivel a feldolgozási kód primitív, ez nem lehetséges.
Először csatlakoztatjuk az összes szükséges fájlt (amelyet a könyvtárból kapunk, h-becenevet).
Ott látjuk a sorokat:
#include "mclmcrrt.h"
#include "mclcppclass.h"
Ezek a fájlok a matlabban lévő mappában találhatók: ... \ MATLAB \ extern \ include \
Másolja őket a projektünkbe és adja hozzá: Project-> Add to Project -> Files
Ezt követően próbálunk fordítani. Semmi ilyen! Több fájl szükséges. A nevüket hibákra tekintjük át, majd másoljuk és hozzáadjuk a projekthez. Nem sokan vannak))
Mindezek után megnyomjuk az Alt + F7 billentyűt, és elkezdjük a legnehezebb: a projekt létrehozása. Az egész esemény sikere ebben a szakaszban van.
A Link-> Input fülre. A Kiegészítő könyvtárút mezőben a könyvtárat a matlabból írjuk: ... \ MATLAB \ extern \ lib \ win32 \ microsoft \. Ez megmutatja a fordítónak egy további elérési utat a szükséges könyvtárak megtalálásához.
És a beállítás utolsó fázisa. Menjen a Visszatérés fülre, ahol a Kiegészítő erőforrás mezőben a Matlab mappát írjuk: ... \ MATLAB \ extern \ include \.
Ez minden. A projekt konfigurálva van
A feldolgozás valami ilyesmire fog kinézni (nagyon egyszerűsített formában, a könyvtárak összes ellenőrzése, érvényességi értékek stb.) Eltávolítása:
sinWPInitialize (); // Inicializálja a könyvtárat
int z = 1; // A változó inicializálása
mwArray zz (0); // Hozzon létre egy mwArray objektumot
sinus (z, zz); Számítsd ki a szinuszot. (zz - c.
Az mwArray osztály az adatcsere osztálya a könyvtár és az alkalmazás között. A Matlabov fordító segítségével részletesen leírja.
Erre talán mindent! Fordíts és örülj!
Példa jó, köszönöm!
Mindent megtett.
A VC ++ 6.0 hibákat ír
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (140). hiba C2061: szintaktikai hiba. "REFCLSID" azonosító
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (161). hiba C2065: "REFCLSID". be nem jelentett azonosító
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (161). hiba C2146: szintaktikai hiba. hiányzik ")", mielőtt az azonosító "clsid"
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (163). hiba C2059: szintaktikai hiba. ')'
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (171). hiba C2061: szintaktikai hiba. "REFCLSID" azonosító
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). hiba C2065: "REFGUID". be nem jelentett azonosító
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). hiba C2146: szintaktikai hiba. hiányzik ")", mielőtt az "guid"
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). hiba C2182: "mclGUIDtochar_proxy". a "void" típusú jogellenes használat
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). hiba C2059: szintaktikai hiba. ')'
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (191). hiba C2146: szintaktikai hiba. hiányzik ")", mielőtt az azonosító "clsid"
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (193). hiba C2059: szintaktikai hiba. ')'
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (200). hiba C2146: szintaktikai hiba. hiányzik ")", mielőtt az azonosító "clsid"
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (200). hiba C2182: "mclCLSIDtochar_proxy". a "void" típusú jogellenes használat
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (200). hiba C2059: szintaktikai hiba. ')'
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (214). hiba C2146: szintaktikai hiba. hiányzik ")", mielőtt az azonosító "clsid"
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (216). hiba C2059: szintaktikai hiba. ')'
c: \ programfájlok \ microsoft vizuális stúdió \ myprojects \ matlab \ matlab \ mclmcrrt.h (224). hiba C2061: szintaktikai hiba. "REFCLSID" azonosító
Mindannyian hibák szintaktikaiak. Gondosan ellenőrizze
Ie leginkább helyes a mclmcrrt.h fejlécfájl?
Miért voltak hibák?
Valószínűleg nem másolta meg a szükséges fájlokat.
Megjegyezte a sorokat
// # tartalmaz "mclmcrrt.h"
// # tartalmaz "mclcppclass.h"
Hiba történt
Fordítás ...
matlab.cpp
Összekapcsolás ...
new_sposob.dll. végzetes hiba LNK1136: érvénytelen vagy sérült fájl
Hiba történt a link.exe futtatásakor.
És hogyan működik közre a dll fájl. Hol lehet megfogalmazni, és hol van az út?
A Flexx02 esetében
Összekapcsoltam. Az új verziók Matlab fordítója nem támogatja a Borland fordítóprogramokat. A következőképpen működik:
1) Létrehozott egy DLL-t a Visual C ++-ban (egy szabad Express verzió alkalmas), amely statikusan összekapcsolja a Matlab dll által létrehozott (hasonlóan az itt leírtakhoz). Az új DLL funkciói elvégezték a szabványos C típusú adatok mwArray-be történő lefordítását és a megfelelő függvények futtatását a Matlab által létrehozott dll-ből.
2) A Builder projektben a C ++ dinamikusan töltötte be a VC-ben létrehozott könyvtárat
Minden probléma megoldódott, sokkal könnyebb használni a .NET-t a DLL-kapcsolatokhoz a Matlab segítségével, és sokkal könnyebb dolgozni velük.
Ha valaki hasonló feladattal rendelkezik, javaslom a .NET használatát
Kérem, segítsen, van néhány kérdés:
- Hogy szükség van-e a környezetre mcr-re a gépen, ha dll-t generálok, majd linuxon alkalmazzák
- Végeztem a futtatható állományt, és futtattam linuxon - minden olyan gépen működik, ahol a grafikus könyvtár telepítve van. De el kell indítani egy olyan rendszert, ahol nincs grafika, de az mcr indításkor kéri. Hogyan mondhatom el mcr-nek, hogy az alkalmazás konzol? Próbáltam mindent - ez nem működik.
Tud valaki segíteni?