【问题标题】:How to use "global static" variable in matlab function called in c如何在 C 中调用的 matlab 函数中使用“全局静态”变量
【发布时间】:2013-03-20 20:06:55
【问题描述】:

您好,我目前正在使用 MATLAB 和 C 进行编码。我已使用 MATLAB Compiler (mcc) 将 MATLAB 函数编译到 C 共享库中,并在 C++ 程序中调用共享库中的函数。

在 C++ 中调用时,是否可以声明全局变量以在 MATLAB 函数之间共享数据?

确切地说,如果matlab中有一个函数matlabA()和函数matlabB(),并使用mcc编译器编译成c++共享库为cppA()cppB(),我可以在它们之间共享一个变量吗?通过在matlabA()matlabB() 中将变量声明为全局变量?

它似乎不起作用,那么我如何在函数之间共享变量?

谢谢!

MATLAB

function matlabA()
    global foo
    foo = 1;
end

function matlabB()
    global foo
    foo
end

C++

cppA();
cppB();

【问题讨论】:

  • 感谢您的修改。我是 stackoverflow 的新手。

标签: c++ matlab global-variables matlab-deployment matlab-compiler


【解决方案1】:

根据 Loren Shure 的 this blog post,强烈建议不要在部署的应用程序中使用非常量静态变量(例如读/写全局变量)。

相反,您可以创建 handle class 来封装数据,并将对象显式传递给这些函数(具有引用复制语义)。

例子:

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

【讨论】:

  • 感谢您的快速回答。本来我觉得这太晦涩难懂了,谁也答不上来。
  • @SolessCHong:欢迎来到 SO!我希望建议的解决方案对您有用吗?
  • 这个想法真的很有帮助,我认为代码肯定会起作用。然而,这个程序实际上比上面显示的更没收,而且它是我的兼职项目,所以我需要一些时间来重建 matlab 代码。
  • 您好,如果您能查看这个新线程,我将不胜感激。 stackoverflow.com/questions/15747411/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-30
  • 1970-01-01
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多