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;
}