Как использовать глобальную статическую переменную в функции Matlab, вызываемой в c

Привет, в настоящее время я пишу код в MATLAB и C. Я скомпилировал функции MATLAB в разделяемую библиотеку C, используя Компилятор MATLAB (mcc) и вызывал функции из разделяемой библиотеки в программе на C++.

Можно ли объявить глобальную переменную для обмена данными между функциями MATLAB при вызове в C++?

Точнее, если в Matlab есть функция matlabA() и функция matlabB(), и они скомпилированы в разделяемую библиотеку С++ с использованием компилятора mcc как cppA() и cppB(), могу ли я разделить переменную между ними, просто объявив переменные глобальными в matlabA() и matlabB()?

Похоже, это не работает, тогда как я могу использовать переменную между функциями?

Спасибо!

МАТЛАБ

function matlabA()
    global foo
    foo = 1;
end

function matlabB()
    global foo
    foo
end

C++

cppA();
cppB();

person SolessChong    schedule 30.03.2013    source источник
comment
Спасибо за вашу модификацию. Я новичок в stackoverflow.   -  person SolessChong    schedule 31.03.2013


Ответы (1)


Согласно этой записи в блоге Лорен Шур, настоятельно рекомендуется не использовать непостоянные статические переменные (например, глобальные переменные для чтения/записи) в развернутых приложениях.

Вместо этого вы можете создать класс-дескриптор для инкапсуляции данных и явно передать объект для этих функций (который имеет семантику ссылочной копии).

Пример:

ФуДата.м

classdef FooData < handle
    properties
        val
    end
end

fun_A.m

function foo = fun_A()
    foo = FooData();
    foo.val = 1;
end

fun_B.m

function fun_B(foo)
    disp(foo.val)
end
person Amro    schedule 30.03.2013
comment
Спасибо за быстрый ответ. Первоначально я думал, что это будет слишком неясно, чтобы кто-то мог ответить. - person SolessChong; 31.03.2013
comment
@SolessCHong: добро пожаловать в SO! Надеюсь, предложенное решение сработало для вас? - person Amro; 01.04.2013
comment
Идея действительно помогла, и я думаю, что код обязательно сработает. Однако программа на самом деле более конфискована, чем показано выше, и это мой проект с частичной занятостью, поэтому мне потребуется некоторое время, чтобы восстановить код Matlab. - person SolessChong; 01.04.2013
comment
Привет, я буду более чем благодарен, если вы сможете проверить эту новую тему. stackoverflow.com/ вопросы/15747411/ - person SolessChong; 01.04.2013