Как мы можем передать структуру из кода C в код Matlab - PullRequest
2 голосов
/ 25 июля 2011

предположим, что программа на C имеет структуру, созданную следующим образом:

b.param1 = 20;
b.parm2 = 42;
b.param3 = 30;

Вопрос в том, что нам нужно сделать или чтобы иметь возможность писать из Matlab

>> b = [bInC.param1; bInC.param2; bInC.param3];

где bInC указывает на память, выделенную вышеупомянутой программой на С

Ответы [ 3 ]

7 голосов
/ 25 июля 2011

У вас есть несколько вариантов, в зависимости от вашей ситуации.

1) Если ваш C-код структурирован таким образом, что его можно вызывать из matlab, вы можете скомпилировать C-код как мекс-файл,Затем вы вызываете функцию C из matlab и возвращаете свой результат.Чтобы вернуть вашу структуру, вы должны создать массив matlab в вашем C-коде и скопировать в него параметры структуры.Интерфейс для этого - mxArray.Это не самый удобный процесс, но он работает хорошо.

mex файлы и mxArray: http://www.mathworks.com/help/techdoc/matlab_external/f29502.html

2) Используйте движок matlab для загрузки ваших значений в matlab без необходимости компиляцииваш код в мекс.Движок позволит вам выполнять команды matlab из вашей C-программы.Вы также можете загрузить переменные в рабочую область.Вам все равно придется создать mxArray, содержащий значения, которые вы хотите скопировать.Затем вы можете использовать функцию engPutVariable , чтобы скопировать mxArray в ваше рабочее пространство matlab.

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

matlab engine: http://www.mathworks.com/help/techdoc/matlab_external/f29148.html

1 голос
/ 25 июля 2011

Вы можете использовать MATLAB Engine для запуска функций MATLAB из кода C.

0 голосов
/ 25 июля 2011

Два способа вызова функций C (и, следовательно, создания указателей на структуры C) из Matlab.

Сборка DLL и вызов общей библиотеки.

Создание файла MEX .

Объем накладных расходов для файла MEX значительно больше, чем для DLL, я настоятельно рекомендую подход на основе DLL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...