Am o problemă la locul de muncă. Este necesar să combinăm puterea Matlab și interfețele Visual C ++. În același timp, este necesar ca software-ul rezultat să funcționeze pe computerele în care MATLAB nu este instalat. (Voi face o rezervă imediat ce înainte de a construi versiunea de lansare este încă prea devreme 🙂).
Prykskav pe site-ul dezvoltatorilor Matalaba afla că aceste sisteme pot fi făcute prieteni în trei moduri:
- Creați o aplicație independentă în Mathlab și conectați-o la C ++;
- Utilizați Matlab motor (a vrut să încercați această metodă, cu toate acestea, nu este o plimbare mai târziu găsit pe site-ul web al dezvoltatorilor pe care noi această caracteristică versiuni ale Matlab eliminate din motive necunoscute pentru mine personal ..);
- Creați o bibliotecă dinamică (dll) și apoi folosiți-o în C ++;
Vom merge pe a treia cale, deoarece este cea mai logică.
Învață un pic despre MATLAB. Am lucrat cu el la universitate, așa că mi-am amintit totul repede. Și pentru începători voi da cele mai de bază:
În Mathlab puteți scrie așa-numitele scripturi și funcții. Ele diferă în principiu. Funcțiile pot fi apelate din alte funcții, iar scripturile nu pot. De aceea, atunci când compilați DLL, trebuie să utilizați funcții, nu script-uri!
Să creăm cea mai simplă funcție: m-file. calcularea sinusului unei valori fixe.
funcția s = sinus ()
s = sin (2);
Apăsați F5 și bucurați-vă de valoarea ans = 0.9093 în fereastra de comandă. Lucrări!
Mai întâi trebuie să configurați Matlab Compiler. Există destule descrieri pentru tuning, așa că nu vom acorda atenție. Mai bine mergem mai departe.
În fereastra de comandă, tastați comanda Deploytool și apăsați Enter. Avem ceva de genul:
Apăsați pictograma pentru noul proiect, selectați biblioteca comună C ++
În partea de jos introduceți numele (vă recomandăm acest lucru, în caz contrar riscați să deveniți confuz) și apăsați OK
Înainte de noi vedem trei dosare. Acum suntem interesați de funcțiile exportate. Acolo vom adăuga m-fișierul nostru cu un sinus și apăsați pe build ().
Așteptăm să se întâlnească biblioteca. Nu se adună foarte repede. E timpul să ne odihnim.
Biblioteca noastră sa adunat. Mergem la dosarul proiectului și vedem doi tati: / distrib și / src. Este ușor să ghici că suntem interesați de primul dintre ei.
În dosar vedem cinci fișiere. readme.txt nu ne interesează deloc. Informațiile utile nu sunt de obicei scrise)))
* .dll, * .lib, * .h sunt fișierele la care vom lucra.
Este timpul să faceți un proiect pentru Visual C ++.
De obicei, în cărți scrieți crearea de proiecte sub consola. Imediat mergem cu un cuțit în rezervor și creăm aplicația MFC. Să o facem interactivă (așa am vrut eu).
Cea mai dificilă problemă o reprezintă crearea unui proiect. Deoarece codul de procesare este primitiv, nu este posibil.
Mai întâi, conectăm toate fișierele necesare (obținute din biblioteca h-nickname).
Acolo vedem liniile:
#include "mclmcrrt.h"
#include "mclcppclass.h"
Aceste fișiere sunt situate în dosarul cu matlab: ... \ MATLAB \ extern \ include \
Copiați-le în proiectul nostru și adăugați: Project-> Add To Project -> Files
După aceea, încercăm să compilam. Nimic de genul ăsta! Aveți nevoie de mai multe fișiere. Ne uităm la erori și le copiem ulterior și le adăugăm la proiect. Nu sunt foarte multe))
După toate acestea, apăsăm Alt + F7 și începem cel mai dificil: configurarea proiectului. Succesul întregului eveniment depinde de această etapă.
Fila Link-> Intrare. În câmpul Additional Library Path, scriem directorul din matlab: ... \ MATLAB \ extern \ lib \ win32 \ microsoft \. Acest lucru îi spune compilatorului o cale suplimentară pentru a găsi bibliotecile necesare.
Și ultima etapă a decorului. Mergeți la fila Resorse, unde în câmpul Additional Resource vom scrie dosarul Matlab: ... \ MATLAB \ extern \ include \.
Asta e tot. Proiectul este configurat
Procesarea va arăta cam așa (într-o formă foarte simplificată, toate verificările pentru biblioteci, valori de valabilitate etc.) sunt eliminate:
sinWPInitialize (); // Inițializați biblioteca
int z = 1; // Inițializați variabila
mwArray zz (0); // Creați obiectul mwArray
sinus (z, zz); // Calculați sinusoidele. (zz - c.
Clasa mwArray este clasa de schimb de date între bibliotecă și aplicație. Este descrisă în detaliu cu ajutorul compilatorului Matlabov.
Despre asta, poate totul! Compilați-vă și bucurați-vă!
Exemplu este bun, multumesc!
El a făcut totul.
VC ++ 6.0 scrie erori
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (140). eroare C2061: eroare de sintaxă. identificatorul "REFCLSID"
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (161). eroare C2065: "REFCLSID". identificator nedeclarat
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (161). eroare C2146: eroare de sintaxă. lipsă ")" înainte de identificatorul "clsid"
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (163). eroare C2059: eroare de sintaxă. ')'
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (171). eroare C2061: eroare de sintaxă. identificatorul "REFCLSID"
c: \ fișiere de programe \ microsoft studio vizuale \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). eroare C2065: "REFGUID". identificator nedeclarat
c: \ fișiere de programe \ microsoft studio vizuale \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). eroare C2146: eroare de sintaxă. lipsă ")" înainte de identificator "guid"
c: \ fișiere de programe \ microsoft studio vizuale \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). eroare C2182: "mclGUIDtochar_proxy". utilizarea ilegală de tip "void"
c: \ fișiere de programe \ microsoft studio vizuale \ myprojects \ matlab \ matlab \ mclmcrrt.h (184). eroare C2059: eroare de sintaxă. ')'
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (191). eroare C2146: eroare de sintaxă. lipsă ")" înainte de identificatorul "clsid"
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (193). eroare C2059: eroare de sintaxă. ')'
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (200). eroare C2146: eroare de sintaxă. lipsă ")" înainte de identificatorul "clsid"
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (200). eroare C2182: "mclCLSIDtochar_proxy". utilizarea ilegală de tip "void"
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (200). eroare C2059: eroare de sintaxă. ')'
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (214). eroare C2146: eroare de sintaxă. lipsă ")" înainte de identificatorul "clsid"
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (216). eroare C2059: eroare de sintaxă. ')'
c: \ fișiere de programe \ studio microsoft \ myprojects \ matlab \ matlab \ mclmcrrt.h (224). eroare C2061: eroare de sintaxă. identificatorul "REFCLSID"
La tine toate erorile sintactice. Verificați cu atenție
Ie cel mai corect fișierul header mclmcrrt.h?
De ce au existat erori?
Cel mai probabil, nu ați copiat toate fișierele necesare.
Linii comentate
// # include "mclmcrrt.h"
// include "mclcppclass.h"
Scrie o eroare
Compilarea ...
matlab.cpp
Conectarea ...
new_sposob.dll. eroare fatală LNK1136: fișier nevalid sau corupt
Eroare la execuția link.exe.
Și cum participă în general fișierul dll. Unde să-l puneți și unde este calea spre ea?
Pentru Flexx02
M-am conectat. Compilatorul Matlab de versiuni noi nu suportă compilatoare Borland. Acționate după cum urmează:
1) Pentru a crea DLL în Visual C ++ (versiune adecvată gratuită Express), care este creat Matlab'om static unind dll (în același mod cum este descris aici). Funcțiile noului DLL pentru a efectua o funcție de transfer de date în standardul tipurile C mwArray și inițierea unor funcții ale dll, creat de Matlab.
2) În proiectul Builder, C ++ a încărcat dinamic o bibliotecă creată în VC
Toate problemele sunt rezolvate, este mult mai ușor de utilizat .NET pentru conexiunile DLL cu Matlab, și este mult mai ușor să lucrezi cu ei.
Dacă cineva va avea o sarcină similară, vă sfătuiesc să utilizați .NET
Ajutor vă rog, există câteva întrebări:
- Dacă mediul mcr este necesar pe mașină dacă voi genera DLL și apoi voi folosi în aplicație pe linux
- Am făcut executabilul și l-am executat pe linux - totul funcționează pe mașina în care este instalată biblioteca grafică. Dar este nevoie să începeți pe un sistem în care nu există grafică, dar MCR o cere la pornire. Cum pot spune mcr că o aplicație este consola? Am încercat totul - nu funcționează.
Poate cineva să ajute?