c语言调用matlab

很多种方法啊,我知道啊
可是我的matlab激活不彻底,无法直接编译成dll、lib
让别人帮忙编译,结果32位和64位,平台又不对
所以最好用的matlab engine


环境配置

包含目录增加:C:\Program Files\MATLAB\R2012b\extern\include
库目录增加:C:\Program Files\MATLAB\R2012b\extern\lib\win64\microsoft
然后是新增64位平台

这是一个matlab生成dll的文章,里面环境配置说的很清楚

代码

我用的还是engine

百度文库的文章,将如何用引擎的

#include <stdlib.h>
#include<stdio.h>
#include "engine.h"
#include<string.h>
#include<math.h>
#pragma comment(lib,"libeng.lib")  
#pragma comment(lib,"libmx.lib") 

#define TEST_SIZE 192
#define RESULT_SIZE 96


void SAE_MATLAB(double * frame,double * result)
{
    Engine *ep; //定义Matlab引擎指针。
    int i;
    mxArray *test_x = mxCreateDoubleMatrix(1,TEST_SIZE, mxREAL); //matlab 数组 test_x
    if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。
    {
        printf("Can't start Matlab engine!\n");

    }
    else
        printf("success\n");

    memcpy(mxGetPr(test_x), frame, TEST_SIZE*sizeof(double)); //将数组frame复制到mxarray数组test_x中。



    engEvalString (ep, "cd E:\\SAE_MATLAB"); //进入m文件所在文件夹
    engPutVariable(ep, "test_x",test_x); //将mxArray数组test_x写入到Matlab工作空间,命名为test_x。
    engEvalString (ep, "result=sae_c(test_x)");
    memcpy(result,mxGetPr(engGetVariable(ep,"result")), RESULT_SIZE*sizeof(double)); //将result结果存到result数组中。
    engClose(ep);
}

int main()
{
    int i;
    double test_x[TEST_SIZE];
    double test_y[RESULT_SIZE];
    for(i=0;i<TEST_SIZE;i++)
    {
        test_x[i]=(i+2.0)/200;
    }
    SAE_MATLAB(test_x,test_y);

    return 0;
}

不过啊,这个要保证你的matlab要完整了
有输入代入matlab,然后输出传回c
其实就感觉就是传值啊
进入m文件文件夹,然后将要用的变量保存到命名空间
然后调用函数
最后回传
也折腾了我快一天了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值