【发布时间】:2014-03-06 21:51:59
【问题描述】:
我想知道为什么我在编译的 Matlab 库中使用的代码在未选择公共语言运行时时会崩溃。 举个简单的例子,我尝试将以下 Matlab 函数编译到共享库中:
function [volOut, volAvg]=testVarPass(volIn)
volOut=double(volIn);
volAvg=mean(volOut(:));
end
使用以下对 mcc 的调用: mcc -B csharedlib:mylib testVarPass.m
接下来,我设置了一个 Visual Studios 2010 控制台项目。
#include "stdafx.h"
#include "matrix.h"
#include "mylib.h"
int _tmain(int argc, _TCHAR* argv[])
{
mxArray *vol_in;
mxArray *vol_out;
mxArray *vol_avg;
mwSize dim_list[3];
double *vol_avg_ptr;
dim_list[0]=10;
dim_list[1]=10;
dim_list[2]=10;
if( !mclInitializeApplication(NULL,0) ) { //initialize Matlab Compiler Runtime
return -1;
}
if (!mylibInitialize()) //initialize library
{
return -2;
}
vol_in=mxCreateNumericArray(3,dim_list, mxINT16_CLASS, mxREAL); //make a sample 3d array
mlfTestVarPass(2, &vol_out, &vol_avg, vol_in); //crashes here
vol_avg_ptr=mxGetPr(vol_avg);
/* Call the MCR and library termination functions */
mylibTerminate();
mclTerminateApplication();
return 0;
}
如果我在构建项目时将公共语言运行时支持设置为:/clr...一切正常。 如果我在构建项目时公共语言运行时支持设置为:无...首先,调试器在调用 mylibInitialize 时会抛出许多异常。最常见的是:varflowFailed、tffFailed、CryptoPP、jitCgFailed 和 xsd_binder::MalformedDocumentError。其次,mlfTestVarPass 调用因访问冲突而崩溃。
我和我一起工作的程序员都想知道为什么。
其他信息: Windows 7的 视觉工作室 2010,SP1 视窗 SDK 7.1 Matlab 2013b
【问题讨论】:
标签: c# c++ .net visual-studio-2010 matlab