2011-06-21 11 views
14

Chcę wywołać funkcję MATLAB w moim projekcie C++.Jak wywoływać funkcje Matlab z C++

Używam Matlab R2010a i Visual Studio 2010

Najpierw stworzyłem prostą funkcję Matlab:

function y = foo(x) 
    y = x+1; 

a następnie użyłem Matlab kompilator skompilować tę funkcję za pomocą kompilatora Matlab GUI (Plik- > new -> Deployment Project, a następnie wybierz udostępnioną bibliotekę C++). Tworzy to pliki 2 foldery: distrib i src.

rozdzielczy zawiera:

  1. foo.dll
  2. Foo.h
  3. foo.lib

src zawiera:

  1. foo.cpp
  2. bla .dll
  3. foo.exp
  4. foo.exports
  5. Foo.h
  6. foo.lib
  7. foo_mcc_component_data.c

Chcę użyć tego pliku w aplikacji C++. Próbowałem wiele razy i nie znalazłem sposobu. Wszystkie sposoby, które znalazłem w Internecie, używają starego kompilatora matlab, który produkuje różne pliki lub działa na starej wersji visual studio.

Proszę, czy ktoś mógłby mi pomóc?

Co należy zrobić? Jakie pliki/referencje muszę dodać i gdzie? Jakie ścieżki muszę zdefiniować?

Odpowiedz

3

Pliki wymagające kompilacji foo.h i foo.lib będą wymagane do skompilowania aplikacji. Plik foo.dll będzie musiał zostać dostarczony wraz z Twoją aplikacją, zwykle w tym samym katalogu.

Jeśli umieścisz plik foo.h w tym samym katalogu, co pliki źródłowe, nie będziesz musiał robić nic specjalnego dla #include "foo.h". Możesz również dodać bezpośrednią ścieżkę do foo.lib w zależnościach zewnętrznych linkerów.

Jeśli chcesz przechowywać te pliki poza folderem projektu i/lub ponownie używać tych plików w innych aplikacjach, możesz przeczytać na VC++ Directories, Projects and Solutions.

Edytuj: Prawdopodobnie będziesz musiał dodać biblioteki MATLAB do swoich ścieżek dołączania i bibliotek. Sprawdź rozwiązanie wspomagające MathWorks: Why do I receive the error 'Could not find include file "mclmcrrt.h"' when trying to compile a stand-alone application?

+0

dodałem tylko Foo.h w plikach nagłówkowych i stworzyłem główną Plik .cpp i ja włączyłem foo.h i otwieram właściwości projektu i przechodzę do linkera, a dodałem w dodatkowych zależnościach foo.lib , a kiedy buduję projekt, daje mi to błąd, którego nie można otworzyć to dwa pliki źródłowe: #include "mclmcrrt.h" #include "mclcppclass.h" znajduje się w foo.h Czy możesz mi pomóc? –

11

może jest za późno, ale na przyszłość.

Dołącz foo.h.

Dodaj C/C++ - Ogólne - dodatkowe uwzględnianie katalogów sposób na nagłówki matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\include).

Dodaj foo.lib, mclmcrrt.lib i mclcommain.lib dla Linker w dodatkowych współzależności.

Dla łącznikiem w dodatkowe katalogi biblioteki pokazać drogę do libs matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft dla 32bit ver (wersje MATLAB i VS powinny być takie same. Musiałem zainstalować drugą wersję Matlab 32bit.)).

Dodałem ścieżkę do foo.lib w mojej ścieżce systemowej. Przed użyciem biblioteki foo.dll należy zainicjować funkcję MCR i biblioteki.

mclInitializeApplication(NULL,0); 
fooInitialize(); 

Po użyciu nie zapomnij:

mclTerminateApplication(); 
fooTerminate(); 

a niektóre kod demonstracyjny, wygląda następująco:

int num = 1; 
double numbrIn = 1.5; 
std::cout<<"now we have " << numbrIn << std::endl; 
mwArray array_in(num, 1, mxDOUBLE_CLASS, mxREAL); 
array_in.SetData(&numbrIn,num); 
mwArray array_out; 
foo(1, array_out, array_in); 
array_out.GetData(&numbrIn, num); 
std::cout<<"now we have " << numbrIn << std::endl; 
+1

Przyszłość dziękuję! – Spencer

Powiązane problemy