如何调用matlab生成的dll文件进行编程

通常在实现图像处理的算法时我们使用Matlab编程,因为它具有丰富的库函数以及操作方便,然而在工程项目中通常使用C/C++语言。如果我们将matlab代码完全重写成C++代码会很麻烦,最好的办法是借助matlab与C/C++接口将.m程序转成dll文件!
一、使用matlab将.m转成dll文件
1、在命令行中输入mex
-setup
提示你是否要在本地安装matlab
compilers,然后选择compiler类型,有matlab自带的编辑器以及检测到的其他编辑器,比如“Microsoft
Visual
C/C++
version
6.0
in
E:\Program
Files\Microsoft
Visual
Studio”,根据自己实际情况选择。
2、在命令行中输入mbuild
-setup
这里的选项和上面类似,依次选择环境确定。
3、生成dll文件
一句命令mcc
-W
cpplib:add
-T
link:lib
add.m
前面的add表示生成的dll文件名,后面的add.m顾名思义是.m文件名。生成后会多出8个文件,有用的是add.ctfadd.dll
add.lib
add.h4个文件,据说新版的Matlab不会生成.ctf文件。
二、VC6.0中调用生成的dll文件
上面生成的dll文件,我们可以借助VC6.0的Depends工具查看导出函数名,但是我们要调用导出函数必须要知道函数的形参返回类型等,这里要借助.h文件,它包含了导出函数的声明,下面以实例来讲解使用方法:
1、add.m文件
function
[a,b]=add(x,y)
a=2*x+y;
b=3*y;
end
注意了add函数有两个返回值,可以猜测一下在C++中是如何处理的;
2、add.h文件
截取其中一段关键代码如下:
extern
void
add(int
nargout,
mwArray&
a,
mwArray&
b
,
const
mwArray&
x,
const
mwArray&
y);
实际上函数的返回是变相的放到形参中的,依次是输出参数个数,输出参数,输入参数。PS
现在做的这个项目中用户自定义算法dll使用的规则和这里类似!
3、C++中调用dll文件
(1)新建空工程,将上面提及的4个文件放到工程目录下;
(2)VC++目录中包含目录:matlab
内的include目录
比如我的是
E:\MATLAB7\extern\include
(3)VC++目录中库目录:matlab
内的lib目录
E:\MATLAB7\extern\lib\win32\microsoft\msvc60,要根据VC++版本修改!
(4)工程属性-》连接-》输入-》附加依赖项
输入:add.lib
mclmcrrt.lib
mclmcr.lib,第一个是生成的。或者在预处理中加入下面代码
#pragma
comment(lib,
"mclmcrrt.lib")
#pragma
comment(lib,
"mclmcr.lib")
#pragma
comment(lib,
"add.lib")
4、C++代码
#include
<iostream>
#include
"add.h"
using
namespace
std;
int
main()
{
if(!addInitialize())
{
cout<<"initilize
failed!!!"<<endl;
return
-1;
}
mwArray
a(1,1,mxDOUBLE_CLASS);
mwArray
b(1,1,mxDOUBLE_CLASS);
a(1,1)=20;
b(1,1)=30;
mwArray
x(1,1,mxDOUBLE_CLASS);
mwArray
y(1,1,mxDOUBLE_CLASS);
//输出参数个数,输出参数,输入参数。
add(2,x,y,a,b);
double
*i=new
double;
double
*j=new
double
;
x.GetData(i,1);
y.GetData(j,1);
cout<<"x="<<*i<<"
y="<<*j<<endl;
getchar();
return
0;
}
注意:addInitialize()一定要!

  • MATLAB,dlne鏃犳硶璇嗗埆
    绛旓細娌℃湁璁剧疆濂藉綋鍓嶆枃浠跺す銆傝缃矾寰勶紝灏dlne瀛樺偍鐨勬枃浠跺す鏀惧湪鍙悳绱㈣矾寰勪笅銆俤lne鏂囦欢鍚嶄笌dlne鍚嶄笉鍚屽鑷达紝姝ゆ椂浣跨敤鐨勬槸dlne鏂囦欢鍚嶏紝鑰岃矾寰勪腑娌℃湁鏀筪lne鏂囦欢鍚嶃
  • 涓閬Matlab缂栫▼棰
    绛旓細dL=(1/(t + 1)^2 + cos(t)^2 + 4*t^2)^(1/2) 鍗充笂杩板叕寮忕殑鏁板琛ㄨ揪寮 df= @(t)(1./(t + 1).^2 + cos(t).^2 + 4*t.^2).^(1/2); %% 灏嗕笂杩拌〃杈惧紡鍗歌浇@(t)涔嬪悗锛屾敞鎰忓姞'.'杩愮畻銆俼uad(df,0,20)绛旀 ans=400.9527 ...
  • 鐢matlab姹傚涓嬭建杩归暱搴,姹傜畻娉曞強杩囩▼~鍦ㄧ嚎绛墌
    绛旓細dl=sqrt(diff(x).^2+diff(y).^2);%姣忓皬娈电嚎娈甸暱 l=sum(dl); %姹傛婚暱 disp(l);
  • matlab 绗﹀彿璁$畻 姹傜┖闂存洸绾块暱搴
    绛旓細(dL)^2=(dx)^2+(dy)^2=r^2*(dt)^2 dL=r*dt >> syms r >> L=r*int('1',0,pi/2)L =1/2*r*pi 鍚岀悊锛屽浜庝笁缁寸┖闂达細(dL)^2=(dx)^2+(dy)^2+(dz)^2 matlab绋嬪簭 syms t x=3*t;y=3*t*t;z=2*t*t*t;dL=sqrt((diff(x))^2+(diff(y))^2+(diff(z))^2...
  • 璇烽棶濡備綍鍦matlab涓瀵逛俊鍙疯繘琛屽幓鍣搷浣溿傛渶濂界敤鍑芥暟鐨勫舰寮,鏂逛究鍏朵粬绋 ...
    绛旓細鍘诲櫔鏈夊緢澶氱鏂规硶锛岀幇鍦ㄥ皬娉㈠幓鍣渶涓哄父鐢紝鍦matlab涓鏈夎嚜甯︾殑鍑芥暟杩涜灏忔尝鍘诲櫔锛岀畝鍗曟槗琛屻傛渶甯哥敤涓旂畝鍗曠殑鏄槇鍊煎幓鍣紝鐢ㄥ嚱鏁癲dencmp()鐢熸垚淇″彿鐨勯粯璁ら槇鍊硷紝鐒跺悗鍒╃敤鍑芥暟wdencmp()杩涜鍘诲櫔銆傚锛氬鍚櫔淇″彿s杩涜3灞傚皬娉㈠垎瑙 [c,l]=wavedec(s,3,'db1'); %s涓哄惈鍣俊鍙凤紝3涓哄皬娉㈠垎瑙e眰鏁帮紝db1涓洪噰鐢...
  • matlab濡備綍姹傚鍚庢眰瀵煎嚱鏁颁负闆舵椂鑷彉閲忕殑鍊
    绛旓細棰樹富鎻愪緵鐨勮〃杈惧紡缂篸w銆dl銆乸鐨勫叿浣撳笺備负浜嗚鏄庢柟娉曪紝璁惧畾dw=1;dl=1;p=1;鍒>> syms A>> dw=1;dl=1;p=1;>> s=dw.*dl.*sin(A).^2+1./2.*dw.*sin(A).*p;>> ds=diff(s,1);%姹備竴闃跺鏁>> A=vpasolve(ds==0)%姹傝ВA鍊艰繍琛岀粨鏋滃涓嬨
  • 濡備綍鍦matlab涓涓轰竴骞呭浘鍍忓姞鍏ラ殢鏈哄櫔澹
    绛旓細M=imread('dl011.jpg') %璇诲彇MATLAB涓殑鍚嶄负cameraman鐨勫浘鍍 subplot(3,3,1)imshow(M) %鏄剧ず鍘熷鍥惧儚 title('original')P1=imnoise(M,'gaussian',0.02) %鍔犲叆楂樻柉韬佸0 subplot(3,3,2)imshow(P1) %鍔犲叆楂樻柉韬佸0鍚庢樉绀哄浘鍍 title('gaussian noise');P2=imnoise(M,'salt & pep...
  • 濡備綍鐢matlab姹傝В涓夊彉閲忛棿鐨勫叧绯
    绛旓細syms a r l s=a*r^2+2*r*l*(sin(a))^2+0.5*(l^2-r^2)*sin(2*a);m=2*l+2*a*r*pi/180;c=s^(5/3)/m^(2/3);dcdl=diff(c,'l')dcdr=diff(c,'r')dcda=diff(c,'a')[l,r,a]=solve(dcdl,dcdr,dcda,'l,r,a')
  • MATLAB ODE45 杈撳叆杈撳嚭闂
    绛旓細(1)鍙互鐢ㄥ叏灞鍙橀噺 锛2锛夊彲浠ワ紝杩欐牱瀹氫箟锛歳=dy(1)function dydl=odefun(l,y)globe a;dydl(:,1)=y^0.5;dydl(:,2)=a*y;
  • 鍏充簬KMV妯″瀷涓殑 matlab 澶勭悊姹傚姪
    绛旓細缂栫▼濡備笅锛堝埆浜鸿鏂囬噷鎵剧殑涔熶笉鐭ラ亾瀵逛笉瀵癸紝鎰熷叴瓒g殑鍙互鍏堣繍琛屼竴涓嬶級Matlab绋嬪簭锛歠unction[Va,SigmaVa]=Conv(E,SigmaE,D,r,T)璁$畻Va锛孲igmaVa key=0;Pl=4*atan(l);Va=E;%va浠涓鸿凯浠g殑鍒濆 newVa=Va;SigmaVa=SigmaE;%SigmaVa浠igmaE涓鸿凯浠g殑鍒濆 For k=1:100000%杩唬SigmaVa For j=...
  • 扩展阅读:一键生成流程图 ... matlab代码生成器 ... 流程图模板可编辑 ... matlab xlswrite ... ai写代码网站matlab ... 免费找matlab代码的网站 ... 中国哪些高校matlab被禁 ... 新手怎么使用matlab ... 流程图生成器 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网