假设C程序的结构实例化如下:
b.param1 = 20;
b.parm2 = 42;
b.param3 = 30;
问题是,我们需要做什么或必须能够从Matlab写作
>> b = [bInC.param1; bInC.param2; bInC.param3];
其中bInC指向由上述C程序分配的内存
答案 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)