c 调用matlab生成的dll,vs2008中调用matlab生成的dll

matlab版本为:matlab7.11.0(R2010b)

vs2008

1.在matlab中生成dll

在m文件中实现如下功能:

获得N个魔方矩阵的秩。m文件的内容如下:

function r = mrank(n)

r = zeros(n,1);

for k=1:n

r(k) = rank(magic(k));

end

将上述内容保存为:mrank.m

在matlab的command 窗口键入:

>> mcc -B csharedlib:mrank mrank.m %该命令将在后面做说明

在matlab7.0中执行上述命令后生成下面几个文件:

mrank.exp    mrank.exports   mrank.h   mrank.lib  mrank.c     mrank.dll

在vs2008中使用m文件的函数功能。

首先配置vs2008的环境

1.工具——> 选项——>项目和解决方案——>VC++目录

(1) 选择“可执行文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\bin\win32(注意:当前的Mathlab安装在C:\Program Files下面)

(2)选择“包含文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\include

(3)选择“引用文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib

(4)选择“库文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft

上述环境只需要配置一次

对于每一个工程,做下面的设置

项目——>属性——>连接器——>输入

选择:附加依赖项:添加:

libmex.lib

libmx.lib

libmat.lib

mclmcrrt.lib

将mrank.h  mrank.lib  mrank.dll拷贝到当前目录下

cpp文件中中的内容如下:

#include "stdafx.h"

#include

#include"matrix.h"

#include"mrank.h"

#include "mclmcrrt.h"

#pragma comment(lib,"mrank.lib")

int main()

{

mxArray *N(NULL),*R(NULL);

int n =12;

mrankInitialize();//初始化动态链接库

N = mxCreateDoubleScalar(n);//用n来初始化生成的数组,其实标量就是一个1*1的数组

mlfMrank(1,&R,N);//执行m文件的主要功能

size_t num = mxGetM(R);//R的行的个数

double *res = new double[num];

memset(res,0,sizeof(double)*num);

memcpy(res,mxGetPr(R),sizeof(double)*num);

for(int i=0;i

printf("%f\n",res[i]);

delete[] res;

mxDestroyArray(N);

mxDestroyArray(R);

mrankTerminate();//终止动态数据连接

return 0;

}

上述cpp文件使用了Matlab编译m文件生成的dll,在cpp中通过mxArray这个数据结构来和dll中的方法进行信息交换。

这样就在cpp中调用了matlab中的m文件实现的方法。

mcc命令说明:

http://www.cnblogs.com/juneja/archive/2008/10/31/1323423.html

posted on 2011-05-12 17:28 呆人 阅读(4340) 评论(0)  编辑 收藏 引用 所属分类: 算法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值