Как вызвать функции Matlab из С++

Я хочу вызвать функцию MATLAB в моем проекте на С++.

Я использую Matlab R2010a и Visual Studio 2010

Сначала я создал простую функцию matlab:

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

а затем я использовал компилятор matlab для компиляции этой функции с использованием компилятора GUI matlab (File- > new → Deployment Project, а затем выберите С++ shared Library). Он создает эти файлы 2 папки: distrib и src.

содержит:

  • foo.dll
  • foo.h
  • foo.lib

src содержит:

  • foo.cpp
  • foo.dll
  • foo.exp
  • foo.exports
  • foo.h
  • foo.lib
  • foo_mcc_component_data.c

Я хочу использовать этот файл в приложении на С++. Я много раз пробовал, и я не нашел пути. Все способы, которые я нашел через Интернет, используют старый компилятор matlab, который создает разные файлы или работает на старой версии визуальной студии.

Так что, пожалуйста, кто-нибудь может мне помочь?

Что мне делать? Какие файлы/ссылки следует добавить и где? Какие пути я должен определить?

Ответы

Ответ 1

Возможно, это слишком поздно, но на будущее.

Включить foo.h.

Добавить C/С++ - General-Additional Include Directories - путь к заголовкам matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\include).

Добавьте foo.lib, mclmcrrt.lib и mclcommain.lib для Linker в дополнительных зависимостях.

Для компоновщика в дополнительных библиотечных каталогах указывается путь к вашим библиотекам matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\lib\win32\microsoft для 32-битного ver (версии Matlab и VS должны быть одинаковыми. Мне пришлось установить вторую версию 32-битного Matlab.)).

Я добавил путь к foo.lib в своем системном пути.

Прежде чем использовать вашу библиотеку foo.dll, вы должны инициализировать функцию MCR и библиотеки.

mclInitializeApplication(NULL,0);
fooInitialize(); 

После использования не забывайте:

mclTerminateApplication();
fooTerminate();

И некоторый демонстрационный код выглядит следующим образом:

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;

Ответ 2

Для компиляции приложения потребуются файлы foo.h и foo.lib. Файл foo.dll должен быть отправлен вместе с полученным приложением, обычно в том же каталоге.

Если вы поместите файл foo.h в тот же каталог, что и исходные файлы, вам не нужно делать что-либо особенное для #include "foo.h". Вы также можете добавить прямой путь к foo.lib во внешних зависимостях компоновщика.

Если вы хотите хранить эти файлы вне папки вашего проекта и/или повторно использовать эти файлы в других приложениях, вы можете прочитать VС++ Directories, Проекты и решения.

Изменить. Вероятно, вам также необходимо добавить библиотеки MATLAB к вашим путям include и library. Проверьте решение поддержки MathWorks Почему я получаю сообщение об ошибке "Не удалось найти файл include" mclmcrrt.h" при попытке скомпилировать автономное приложение?