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

jav*_*Man 2 c matlab structure

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

b.param1 = 20;
b.parm2 = 42;
b.param3 = 30;
Run Code Online (Sandbox Code Playgroud)

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

>> b = [bInC.param1; bInC.param2; bInC.param3];
Run Code Online (Sandbox Code Playgroud)

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

小智 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