C++调用Matlab Compiler Runtime库函数的最简方法

Matlab Compiler Runtime的官方简介

但是下载安装该runtime后,发现没有示例代码,直接调用某个函数测试,比如说用mxCreateDoubleMatrix分配一个1x1的矩阵,会返回空指针,看该函数的官方文档,分配失败的原因是heap内存不够,怀疑此heap非彼heap

用mclmcrrt(runtime对应的lib文件)和32bit(我的x86机器)两个关键字搜百度,搜到了这篇文章

其实就是没有初始化matlab的运行环境所致,这其中自然包括matlab heap空间的预分配,以及其他很多matlab环境的基础设施

这种做法类似lua的虚拟机初始化和关闭:

int main() {  
  // Create a new lua state  
  lua_State *myLuaState = luaL_newstate();  
  
  lua_close(myLuaState);  
}  

所以以后从C/C++调用动态语言/脚本语言时,切记先创建宿主环境。

对她的代码进行一番精简,方便大家快速找到要点

#include <iostream>  
#include "mclmcrrt.h"

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
    if (!mclInitializeApplication(NULL,0)) //开始应用的函数否则不能初始化dll文件
    {
        cout<< "could not initialize the application properly"<< endl;
        exit(1);
    }
    mxArray *f1 = mxCreateDoubleMatrix(1,1, mxREAL);
    assert (f1 != NULL);
    mxDestroyArray(f1);

    //记得回收资源!
    mclTerminateApplication();
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值