server=actxserver('matlab.application.single'); server.Execute(' enableservice (''AutomationServer'', true)');
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include "engine.h"
int PASCAL WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpszCmdLine,
int nCmdShow)
{
// ПОДКЛЮЧЕНИЕ К СЕРВЕРУ МАТЛАБ(!)
printf("%s","Connect to exist Matlab Engine ...");
Engine *ep; // Start the MATLAB engine
if (!(ep = engOpen(NULL))){
MessageBox ((HWND)NULL, (LPSTR)"Can't start MATLAB engine",
(LPSTR) "Engwindemo.c", MB_OK);
exit(-1);
}
printf("%s"," Ok. \n");
printf("%s","\n");
// ЗАПИСЬ ДВУМЕРНОГО МАССИВА типа DOUBLE
int row=2,col=3;
double DARR[row][col]={0.1,0.2,0.3,0.4,0.5,0.6}; // Массив СИ++
mxArray *OutArr=mxCreateDoubleMatrix(2,3,mxREAL); // Создаем массив OUT
memcpy((char *) mxGetPr(OutArr), (char *) DARR, row*col*sizeof(double)); // Копируем массив DARR в OUT
engPutVariable(ep, "DoubleArrayFromCpp", OutArr); // Отправляем массив в матлаб
printf("%s","Double Array Send to Matlab Engine \n");
printf("%s","\n");
printf("%s","\n");
mxDestroyArray(OutArr); //очищаем массив
getch();
// Чтение ДВУМЕРНОГО МАССИВА типа DOUBLE
mxArray *InDArr=engGetVariable(ep, "DoubleArrayFromCpp"); // Получаем указатель на считанный массив
int rowi= mxGetM(InDArr); // Считаем число строк
int coli=mxGetN(InDArr); // Считаем число столбцов
double InArr[rowi][coli]; //Создаём клон массива в Си++
memcpy(InArr, mxGetPr(InDArr) ,rowi*coli*sizeof(double) ); // Заполняем клон-массив
printf(" Double Array Loaded from Matlab, num rows %d", rowi);
printf("\n Double Array Loaded from Matlab, num columns %d", coli);
printf("%s","\n");
printf("\n Double Array Loaded from Matlab, first element %f", InArr[0][0]);
printf("\n Double Array Loaded from Matlab, last element %f", InArr[rowi-1][coli-1]);
printf("%s","\n");
printf("%s","\n");
mxDestroyArray(InDArr); //очищаем массив
getch();
// ВЫЗОВ ФУНКЦИИ в MATЛАБ ( и, одновременно, создание 2x2 Cell массива)
char func[100] = "CellArray={'Smart-Lab','Kot-Begemot';'Blog','Cpp-MatlabEngine'}";
engEvalString(ep,func);
// Чтения массива строк (Cell Array)
mxArray *InCArr=engGetVariable(ep, "CellArray"); // Получаем указатель на считанный массив
int rowc= mxGetM(InCArr); // Считаем число строк
int colc=mxGetN(InCArr); // Считаем число столбцов
printf("\n Cell Array Loaded from Matlab, num rows %d", rowc);
printf("\n Cell Array Loaded from Matlab, num columns %d", colc);
printf("%s","\n");
char *CArr[rowc][colc];
int i,j;
for (i=0;i<rowc;i++)
{
for (j=0;j<colc;j++)
{
CArr[i][j]=mxArrayToString(mxGetCell(InCArr,i*colc+j));
printf("\n Cell Array Loaded from Matlab element %d %s\n", i*colc+j, CArr[i][j] );
}
}
mxDestroyArray(InCArr); //очищаем массив
getch();
int engOutputBuffer(Engine *ep, char *buffer, int buflen); — захват выходного буфера процесса Матлаб
int engSetVisible(Engine *ep, bool newVal); — изменение видимости окна процесса Матлаб
int engClose(Engine *ep); — закрытие указанного процесса Матлаб


Матлаб, я так понимаю, уже на фиг никому не нужен.
Сейчас готовлю материал по обмену Lua c Python. Хотя я о такой простой возможности обмена Луа со всем и вся уже писал, народ не внемлет.) Попробую еще раз.)
Матлаб, Борланд?(С++) что то еще. Слышал можно тупа купить виртуальную машину, где всё уже будет установлено. Так то схема понятна, есть данные(в чем то) фундаментальные, технические, цены. С ними как то работаем(исследуем) с помощью АPI функций Матлаба, на базе С++(программы).
Список программ?