您的位置:首页 > 编程语言 > MATLAB

Vc调用Matlab7说明

2013-06-28 12:20 246 查看
Vc调用Matlab7说明
一、Matlab7安装配置

1. 安装(略),但需要保证电脑上 matlab与vs2008

2. 运行mex –setup(选择或改变编译配置,不配置可能会引起不能编译dll或者编译的dll 不能被vc调用)

1) 系统提示:Would you like mex to locate installed compilers [y]/n?

选择 y 回车

2) 出现结果可能如下:

Select a compiler:

[1] Lcc-win32 C 2.4.1 in F:\Tools\DevTools\MATLAB\R2009b\sys\lcc

[0] None

如果需要选择vc编译器(一般情况下)需要选择N,选择N后出现结果如下:

Select a compiler:

[1] Intel C++ 9.1 (with Microsoft Visual C++ 2005 SP1 linker)

[2] Intel Visual Fortran 10.1 (with Microsoft Visual C++ 2005 SP1linker)

[3] Microsoft Visual C++ 2005 SP1

[4] Microsoft Visual C++ 2008 Express

[5] Microsoft Visual C++ 2008 SP1

选择 5

3) 系统可能提示如下:

The default location for Microsoft VisualC++ 2008 SP1 compilers is C:\Program Files (x86)\Microsoft Visual Studio 9.0,

but that directory does not exist on thismachine.

Use C:\Program Files (x86)\Microsoft VisualStudio 9.0 anyway [y]/n?

路径正确时可以直接选Y,路径错误时选N,重新设置vc2008安装路径

4) 成功安装后出现可能提示:

Use C:\Program Files (x86)\Microsoft Visual Studio 9.0 anyway [y]/n?n

Please enter the location of your compiler: [C:\Program Files(x86)\Microsoft Visual Studio 9.0] D:\Program Files (x86)\Microsoft VisualStudio 9.0

Please verify your choices:

Compiler: Microsoft Visual C++ 2008 SP1

Location: D:\Program Files (x86)\Microsoft Visual Studio 9.0

3. 运行 mbuild –setup(配置基本同上)

二、Vc配置

如果配置一切正常,包含文件目录与库文件目录会自动设置,如果没有自动设置,需要手动设置一下。

1. 设置包含文件

设置vc++目录中的包含文件路径,在最下方添加实际的matlab的include路径

2. 设置库文件目录

三、Matlab生成dll

1. 使用matlab生成一个.m文件

2. 在matlab环境中调用该函数

现在我们得出的结果是 5

3. 运行 mcc -t-h-L C-W lib: ppp-T link: lib myfunct.m

MATLAB会提示 -t -h -L
这三个参数已经不再使用了,不管它,工作目录中会生成一堆文件,其中的ppp.h ppp.lib ppp.dll三个文件是我们所需要的。这个过程可能会持续一会,只要不报错,你多等一会,最多一分钟,在目录中会生成所需要的文件。

也可以直接使用

mcc -Wlib:gpsanarmxl -T link:lib gpsana.m

这样的命令行进行编译生成dll

其中ppp可以指定为其他的名字

四、Vc调用dll

1. 使用vc创建一个控制台程序

2. 在main函数中输入以下代码

int _tmain(int argc, _TCHAR* argv[])
{
// 初始化环境
bool bl = pppInitialize();

// 参数定义
double a[1] = {1.0};
double b[1] = {2.0};
double ret;

// 因为matlab所需要的参数都是矩阵,故应如下方式定义
mxArray *G = mxCreateDoubleMatrix(1, 1, mxREAL);
// 输入矩阵,×
mxArray *y = mxCreateDoubleMatrix(1, 1, mxREAL);
// 调用MATLAB函数,参数都必须是矩阵形式
mxArray *R = mxCreateDoubleMatrix(1, 1, mxREAL);
// 调用MATLAB函数,参数都必须是矩阵形式

// 将数据拷贝到matlab定义的变量中
memcpy((void *)mxGetPr(G), (void *)a,
sizeof(a)); //
拷贝数据
memcpy((void *)mxGetPr(y), (void *)b,
sizeof(b)); //
拷贝数据

// 调用函数
mlfMyfunct(1, &R, G, y);

// 从matlab返回值中获得函数返回值
double * md = mxGetPr(R);
// 取得mxArray中的数据
double result = md[0];
// 数组第一个元素就是我们想要的值

// 打印返回值
printf("%f", result);

// 将matlab申请的变量释放掉
mxDestroyArray(G); // 释放内存
mxDestroyArray(y);

pppTerminate(); // 结束调用

char c;
scanf("%c",&c);

return 0;
}

注意:需要将lib文件添加到工程中。

3. 编译运行后,会输出结果 3。如果我们将 参数改为2,3,将会输出5,与matlab中输出的结果是相同的。

结果如下:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: