Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2

Как связать визуальную среду программирования C++ builder и matlab?

21.10.2012, 21:53. Показов 7598. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Использую Rad Studio C++ Builder XE3. Так же по учёбе иногда приходится пользоваться матлабом. Сама среда программирования Matlab для инженеров (точно не для меня) хороша. Но создание GUI там для приложений просто ужасен.
Поэтому такой вопрос. Есть *.m файл делающий свою функцию. Можно ли как-то подключить его к проекту Rad Studio C++ Builder XE3 чтобы производить расчёты?
Создам нормальный функциональный GUI, программу которая считывает введённые данные и посылает в *.m файл, после чего *.m файл делает расчёт и выводит график.

З.Ы.: Библиотеки Matlab заранее установлены. Так что независимое приложение должно работать без самой среды Matlab. В частности расчёты должны производится и график тоже может выводится.

З.Ы.Ы.: Хотел бы увидеть наглядный пример.

Заранее спасибо!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.10.2012, 21:53
Ответы с готовыми решениями:

Как связать визуальную среду программирования с++ builder и matlab?
Друзья, может кто делал нечто подобное ??? Нужно связать матлаб и какую-нибудь визуальную среду программирования, в частности с++...

Как связать визуальную среду программирования C++ builder и matlab?
есть некий m-файл.средствами Matlab C/C++ Compiler я кое как создал С файл.Но как с ним работать в билдере я так и не разобрался.Подключил...

Как связать matlab и визуальную среду программирования ?
Нужно связать матлаб и какую-нибудь визуальную среду программирования, в частности с++ Builder. Например в визуальной среде дана форма...

27
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
07.04.2013, 15:09
Студворк — интернет-сервис помощи студентам
Смоленцев, Подкур, Подкур: Программирование в среде Borland C++ Builder с математическими библиотеками MATLAB C/C++ (+CD)
0
 Аватар для Pirat-SR
67 / 67 / 10
Регистрация: 20.02.2012
Сообщений: 234
07.04.2013, 15:09
Цитата Сообщение от Avazart Посмотреть сообщение
Ты хотя бы тему прочитал полностью... это старая книга и там старый Builder и старый МатЛаб...

Не по теме:

Какая разница для какого Builder'а. Главное основы.

0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
07.04.2013, 15:12
Цитата Сообщение от Avazart Посмотреть сообщение
Как бы была уже тема насчет матлаба Как связать визуальную среду программирования с++ builder и matlab?
Там вроде говорится что матлаб как бы перестал поддерживать работу с Builder-ами поэтому не думаю что получится что-то напрямую.
Ну да какая разница что с того что я уже кидал ссылку на эту тему с книгой ? Главное вставить свои пять копеек.

Проблема в подключении либ, а не в основах...
0
 Аватар для Whatson
9 / 9 / 0
Регистрация: 18.11.2011
Сообщений: 55
08.04.2013, 16:56
В конце-концов заработало! Avazart, сначала прогнал ваш пример у себя - всё работает. Потом пытаюсь по аналогии с нуля написать (console application), всё подключить (.lib, .dll) - выдавало "не могу найти LIBMATLB.DLL", хотя всё это лежит как и у вас в папке Project-а. Решил проблему так - сравнил настройки Project-ов (вашего и моего) и оказалось, что у вас в поле Project->Options->Debugger->Working Directory стоит точка!!! Осталось понять, что это означает
0
Эксперт С++
 Аватар для Avazart
8489 / 6156 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
08.04.2013, 17:00
Точка - текущая директория.

Добавлено через 1 минуту
Необходимо сохранять exe не в папках debug/release, а в папке с исходниками или другое решение
0
 Аватар для Whatson
9 / 9 / 0
Регистрация: 18.11.2011
Сообщений: 55
10.12.2013, 12:29
Ок, продолжим... Подскажите, плз!
Создаю я динамическую библиотеку С/C++ через MATLAB Coder (настройки default):
(в mex -setup использую "[2] Microsoft Visual C++ 2008 SP1 in C:\Program Files\Microsoft Visual Studio 9.0")
Matlab M
1
2
3
4
5
6
7
8
9
function [c] = MPlus(a, b)
if(isnumeric(a) && isnumeric(b))
c = a + b;
%PLUS Summary of this function goes here
%   Detailed explanation goes here
else
c = NaN;    
end;
end
заранее указываю типы аргументов как матрицы 2x2 (ответ тоже 2x2 будет, ясное дело);
На выходе, помимо MPlus.dll (и манифеста) создаются много файлов .h и .с. Все их несу в корневой каталог моего проекта в XE2 и пытаюсь вызвать MPlus динамически-связанную в коде:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <vcl.h>
//#include <vector.h>
#pragma hdrstop
 
#include "MPlus_types.h"
#include "MPlus_initialize.h"
#include "MPlus.h"
#include "MPlus_terminate.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
 
typedef double __cdecl (*dll_func_mplus)(const real_T *A,
                           const real_T *B,  real_T *C); //подсмотрели типы
dll_func_mplus pShowMSum = NULL;
TForm1 *Form1;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button3Click(TObject *Sender)
{
HINSTANCE hDLL_mpl = LoadLibrary("MPlus.dll");                    //грузится
pShowMSum = (dll_func_mplus)GetProcAddress(hDLL_mpl, "MPlus");     //грузится
 
real_T x1[4], y1[4], mC[4];
x1[0] = 0;  y1[0] = 0;
x1[1] = 1;  y1[1] = 1;
x1[2] = 1;  y1[2] = 0;
x1[3] = 0;  y1[3] = 1;
 
MPlus_initialize();                //без _initialize()/_terminate() работает также  
pShowMSum(x1, y1, mC);                        //тут начинается плохое...           
MPlus_terminate();
Label2->Caption = FloatToStr(mC[3]);           //тут проявляется плохое...
FreeLibrary(hDLL_mpl);
}
Тип real_T == double, поэтому проблем с индексацией не должно быть.
(В примере вроде как у структуры emxArray_real_T в data индексация начинается с 1, плюс надо кучу танцев с бубнон: задать размерность - emxInit_real_T(&x1, 2); проинициализировать - emxEnsureCapacity((emxArray__common *)x1, 0, (int32_T)sizeof(real_T));...;удалить - emxFree_real_T(&x1).
В RunTim-е на breakpoint-е уже на строке после вызова pShowMSum() видно, что mC содержит правильный ответ!
Наверное происходит утечка памяти или ещё что-то, и при почти любом последующем действии появляется:
"Project Progect1.exe raised exeption class $C0000092 with message 'floating point stack check at 0x00402e65'."
Наверное нельзя так просто вызывать pShowMSum() и распоряжаться аргументами после вызова?
Делал по этому примеру для своих матриц 2xn, те же проблемы, упростил его до https://www.cyberforum.ru/cgi-bin/latex.cgi?$\nwarrow$ и всё-равно вылетает та же ошибка

Добавлено через 51 минуту
Кажется решил, но как-то криво... Дело было в автоматизированном управлении памятью. Похоже, необходимо любую функцию MatLab-a обрамлять в mlfEnterNewContext(int nout, int nin, mxArray **, mxArray *) и mlfRestorePreviousContext(e.t.c.):
C++
1
2
3
4
5
6
7
...
mlfEnterNewContext(0, 0);
MPlus_initialize();
pShowMSum(x1, y1, mC);
MPlus_terminate();
mlfRestorePreviousContext(0, 0);
...
Пришлось подтянуть библиотеки из mglinstaller.exe (или примера Avazart-а), теперь отсею ненужные из них и попробую перейти к главной задаче...
Не думал, что будет столько мороки с дин. .dll.
0
 Аватар для Whatson
9 / 9 / 0
Регистрация: 18.11.2011
Сообщений: 55
23.01.2014, 19:11
Во общем, загорелся идеей (наработки есть) написать программку на С, которая по информации "из вне" (на самом деле "из внутри") будет вызывать и использовать функции из .dll, созданных матлабом. Идея проста: .dll кидается в окружение матлабовских файлов, необходимое для успешного её "прочтения", в run-time по некоторой информации формируется шаблон функции (с входными и выходными аргументами), которая потом вызывается из этой .dll. Время работы функции фиксируется. Соответственно можно тестировать время выполнения разных матлабовских функций + становится ясно какое окружение для их вызова нужно.
Только нужно оно кому-нибудь хоть?
0
23.01.2014, 19:30

Не по теме:

Цитата Сообщение от Whatson Посмотреть сообщение
Только нужно оно кому-нибудь хоть?
Да думаю нет ...

1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2014, 19:30

переехать из консоли в визуальную среду
народ,подскажите мне пожалуйста,я щас знаю С++(не полностью) работаю в консоли,можно тот же самым образом работать и в визуальной...

Вопрос: можно ли во фри паскале сделать визуальную среду
А можно ли во фри паскале сделать визуальную среду?

подскажите новичку простую среду длч програмирования на русском и желательно визуальную
1.Подскажите простую програмку для написания програм на русском языке и желательно визуализированную. 2.Есть ли визуал базис на...

Как поставить пароль на папку, используя среду программирования Delphi 7?
Как поставить пароль на папку, используя среду программирования delphi 7. Нужно сделать что-то подобное: как только открываю папку,...

Как связать С++ builder и 3D max?
Доброго времени суток. Ребята у меня такая проблема: Я написал программу (приложение) на С++ Builder, теперь хочу чтобы при ее запуске,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
28
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru