Как вызывать функции Matlab из C ++ - PullRequest
15 голосов
/ 21 июня 2011

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

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

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

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

и затем я использовал компилятор Matlab для компиляции этой функции с помощью GUI-компилятора Matlab (File-> new-> Deployment Project и затем выбрал C ++ shared Library). Он производит эти файлы 2 папки: дистрибутив и SRC.

Дистрибьютор содержит:

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

src содержит:

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

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

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

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

Ответы [ 2 ]

12 голосов
/ 04 мая 2012

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

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

Добавить C / C ++ - Общие-дополнительные каталоги включения путь к заголовкам Matlab (C:\Program Files (x86)\MATLAB\R2009b\extern\include).

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

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

Я добавил путь к 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;
3 голосов
/ 21 июня 2011

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

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

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

Редактировать : Возможно, вам также понадобится добавить библиотеки MATLAB в пути включения и пути к библиотекам.Ознакомьтесь с решением поддержки MathWorks Почему я получаю сообщение об ошибке «Не удается найти файл включения« mclmcrrt.h »» при попытке компилировать автономное приложение?

...