我在matlab中使用“mcc”命令从一个简单的添加函数创建了一个dll文件,如下所示:
function c = MyAdd(a,b)
c = a + b;
我输入了这个命令:
mcc -t -L C -W lib:libMyAdd -T link:lib MyAdd.m libmmfile.mlib
它生成这些文件:
libMyAdd.lib
libMyAdd.c
libMyAdd.h
libMyAdd.dll
然后我在VS中创建了一个空的C ++项目并编写了这个源代码:
#include <iostream>
#include <conio.h>
#include "libMyAdd.h"
int main()
{
double k[4];
mwArray out;
out.GetData(k, 4);
// initialize MCR and lib
if (!mclInitializeApplication(NULL,0)) {
std::cerr << "could not initialize the application" << std::endl;
return -1;
}
if(!libMyAddInitialize()) {
std::cerr << "Could not initialize the library" << std::endl;
_getch();
return -1;
}
try {
// create input
double g[] = {1.0, 2.0, 3.0, 4.0};
double h[] = {5.0, 6.0, 7.0, 8.0};
mwArray in1(2, 2, mxDOUBLE_CLASS, mxREAL);
mwArray in2(2, 2, mxDOUBLE_CLASS, mxREAL);
in1.SetData(g, 4);
in2.SetData(h, 4);
// call function
mwArray out;
MyAdd(1, out, in1, in2);
// show result
std::cout << "in1 + in2 = " << std::endl;
std::cout << out << std::endl;
double k[4];
out.GetData(k, 4);
for(int i=0; i<4; i++) {
std::cout << k[i] << " " << std::endl;
}
} catch (const mwException& e) {
std::cerr << e.what() << std::endl;
return -2;
} catch (...) {
std::cerr << "Unexpected error thrown" << std::endl;
return -3;
}
// cleanup
libMyAddTerminate();
mclTerminateApplication();
return 0;
}
我还将这些路径添加到项目属性中的include和library目录 - > VC ++目录以及链接器中的其他库目录 - &gt; general
C:\Program Files\MATLAB\MATLAB Production Server\R2015a\extern\include
C:\Program Files\MATLAB\MATLAB Production Server\R2015a\extern\lib\win64\microsoft
另外,我添加了以下链接 - >输入 - >附加依赖项:
mclmcrrt.lib
libeng.lib
libmx.lib
libmex.lib
libmat.lib
mclmcr.lib
libMyAdd.lib
由于我的matlab版本是R2015a(64位),我将活动解决方案平台更改为x64(它是Win32)。
编译器没有显示任何错误,但在编译时会得到第一次机会异常(上传的图片)。
我做错了什么? 有什么建议吗?[上传的图片]