我们如何将结构从C代码传递给Matlab代码

时间:2011-07-25 14:00:44

标签: c matlab structure

假设C程序的结构实例化如下:

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

问题是,我们需要做什么或必须能够从Matlab写作

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

其中bInC指向由上述C程序分配的内存

3 个答案:

答案 0 :(得分:7)

根据您的具体情况,您有几种选择。

1)如果您的C代码的结构可以从matlab调用,您可以将C代码编译为mex文件。然后,您将从matlab调用C函数并返回结果。要返回结构,必须在C代码中创建一个matlab数组,并将结构参数复制到其中。这个接口是mxArray。它不是最方便的过程,但效果很好。

mex文件和mxArray:http://www.mathworks.com/help/techdoc/matlab_external/f29502.html

2)使用matlab引擎将值加载到matlab中,而无需将代码编译成mex。该引擎将允许您从C程序执行matlab命令。您还可以将变量加载到工作区中。您仍然需要创建一个包含要复制的值的mxArray。然后,您可以使用 engPutVariable 函数将mxArray复制到matlab工作区中。

请注意,引擎维护自己的工作区,默认情况下它不会自动将变量复制到当前matlab会话的工作区中。有些命令可以在工作空间之间移动变量,但我没有对此进行调查。我发现将变量保存到mat文件并将其加载到主工作区更快,但如果您需要自动化方法,这并不理想。

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

答案 1 :(得分:1)

您可以使用MATLAB Engine从C代码运行MATLAB函数。

答案 2 :(得分:0)

从Matlab调用C函数(从而创建指向C结构的指针)的两种方法。

Build a DLL并调用共享库。

Build a MEX file

MEX文件的开销明显大于DLL,我强烈推荐基于DLL的方法。