Как подружить Matlab и Visual C++

Как подружить Matlab и Visual C++

По работе вылезла проблема. Необходимо совместить мощность и интерфейсы C++. При этом необходимо, чтобы полученный софт работал на компьютерах, где матлаб не установлен. (Оговорюсь сразу, что до билдинга релизной версии пока ещё рановато :) ).

 

Итак мы имеем:

 

  1. 2008a (7.6.0.324) - данная версия очень удобна в том, что можно создавать приложения с графической оболочкой.
  2. C++ 6.0 + Visual Assist – уже классика. Обновлять не хочу

Порыскав по сайту разработчиков матлаба узнаем, что эти системы можно подружить тремя способами:

 

  1. Создать в матлабе независимое приложение и подключить его в С++;
  2. Использовать Engine (хотел попробовать этот способ, однако, не прокатил. Позже нашёл на сайте разработчиков, что эта возможность в матлабе новых версий удалена. По непонятным лично мне причинам);
  3. Создать динамическую библиотеку () и затем использовать её в С++;

Мы пойдём третим путём, так как он наиболее логичный.

 

Немного узнаем про матлаб. Я-то с ним раньше в универе работал, поэтому быстро всё вспомнил. А для новичков приведу самое основное:

В матлабе можно писать так называемые скрипты и функции. Они между собой принципиально различаются. Функции могут вызываться из других функций, а скрипты – нет. Именно поэтому при компиляции необходимо использовать функции, а не скрипты!

Создадим простейшую функцию: m-файл , вычисляющую синус фиксированного значения.

1
2
function s=sinus()
s=sin(2);

Нажимаем F5 и радуемся значению ans =0.9093 в Command Window. Работает!!

Для начала необходимо настроить . Описаний по настройке хватает, поэтому не будем уделять этому внимание. Лучше пойдем дальше разбираться.

 В командном окне набираем команду Deploytool и давим Enter. Получаем примерно такое:

 Как подружить Matlab и Visual C++

 Давим на иконку нового проекта, выбираем C++ Shared library

 Как подружить Matlab и Visual C++

 Внизу вводим имя (рекомендую это сделать, иначе вы рискуете запутаться) и давим ОК

 Как подружить Matlab и Visual C++

 Видим перед собой три папки. Сейчас нас интресует Exported Functions. Туда добавляем наш m-файлик с синусом и давим на build (Как подружить Matlab и Visual C++).

 Ждём пока соберется библиотека. Она собирается не очень быстро. Самое время отдохнуть.

 Вот собралась наша библиотека. Идём в папку проекта и видим две папочки: /distrib и /src. Легко догадаться, что нас интересует первая из них.

 В папке видим пять файлов. readme.txt нас не интересует вообще. Полезной инфы там обычно не пишут )))

 *., *.lib, *.h – это те файлы, с которыми будем работать.

 

Самое время заняться проектом под C++.

 Обычно в книжках пишут создание проектов под консоль. Мы же сразу пойдём с ножом на танк и создадим MFC application. Сделаем его диалоговым (вот просто так мне захотелось).

 Самая сложность возникает при настройке проекта. Так как код обработки – примитивный до нельзя.

 Сначала подключаем все необходимые файлы (полученный из библиотеки h-ник).

 Там видим строки:

1
2
#include "mclmcrrt.h"
#include "mclcppclass.h"

 Эти файлы лежат впапке с матлабом: …\\extern\include\

 Копируем их в наш проект и добавляем: Project->Add To Project -> Files

 После этого пробуем скомпилировать. Ничего подобного! Нужны ещё файлы. Смотрим на их названия в ошибках и последовательно копируем и добавляем в проект. Там их не очень много ))

 После всего этого давим на Alt+F7 и начинаем самое сложное: настройку проекта. От этого этапа зависит успех всего мероприятия.

 Как подружить Matlab и Visual C++

 Вкладка Link->general. В поле Object/Library Modules рисуем нашу библиотеку (*.lib) и библиотеку mclmcrrt.lib (именно в ней реализован класс mwArray, через который синхронизируется обмен данными с нашей библиотекой). Если вы не подключите mclmcrrt.lib то при инициализации mwArray получите красивую ошибку LNK2001.

 Вкладка Link->Input. В поле Additional Library Path пишем директорию из матлаба: …\\extern\lib\win32\microsoft\. Это говорит компилятору о дополнительном пути поиска необходимых библиотек.

  Как подружить Matlab и Visual C++

  И последнийэтап настройки. Идём в вкладку Resorse, где в поле Additional Resourse пишем матлабовскую папку: …\\extern\include\.

 

pr_res.gif

 

Всё. Проект настроен

 Теперь в визуальном редакторе на нашем диалоговом окне создадим кнопочку вычисления синуса, по нажатию на которую будет этот самый синус и вычисляться силами нашей библиотечки.

 Обработка будет выглядеть примерно так (в очень упрощенном виде, убраны все проверки на наличие библиотек, на валидность значений и т.д.):

1
2
3
4
5
sinWPInitialize(); //Инициализация библиотеки
int z=1; //Инициализируем переменную
mwArray zz(0); //Создаем объект mwArray
sinus(z,zz); //Вычисляем синус. (zz - выходной параметр)
sinWPTerminate(); //Очистка памяти после работы библиотеки

Класс mwArray – класс обмена данными между библиотекой и приложением. Он достаточно подробно описан в хелпе по матлабовскому компилятору.

На сим, пожалуй, всё! Компилируйте и радуйтесь!

Козлов Эдуард, ОИПИ Академии Наук Республики Беларусь

Прокомментировать

XHTML: Можете использовать теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я ЧЕЛОВЕК!!!!.

Наталья Подольская шаблоны wordpress Энциклопедия животного мира. Фото и статьи. Заказать свадебный макияж в Минске, пробный макияж бесплатно!