5

こんにちは、現在 MATLAB と C でコーディングしています。MATLAB Compiler (mcc)を使用して MATLAB 関数を C 共有ライブラリにコンパイルし、C++ プログラムで共有ライブラリの関数を呼び出しました。

C++ で呼び出されたときに MATLAB 関数間でデータを共有するためにグローバル変数を宣言できますか?

正確には、関数matlabA()と関数matlabB()が matlab にあり、mcc コンパイラを使用して c++ 共有ライブラリにコンパイルされている場合、cppA()およびでcppB()変数をグローバルとして宣言するだけで変数を共有できますか?matlabA()matlabB()

機能していないように見えますが、関数間で変数を共有するにはどうすればよいですか?

ありがとう!

MATLAB

function matlabA()
    global foo
    foo = 1;
end

function matlabB()
    global foo
    foo
end

C++

cppA();
cppB();
4

1 に答える 1

2

Loren Shure によるこのブログ投稿によると、デプロイされたアプリケーションでは非定数の静的変数 (読み取り/書き込みグローバルなど) を使用しないことを強くお勧めします。

代わりに、ハンドル クラスを作成してデータをカプセル化し、それらの関数にオブジェクトを明示的に渡すことができます (これには参照コピー セマンティクスがあります)。

例:

FooData.m

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
于 2013-03-30T12:18:30.753 に答える