- 1、本文档共5页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Vc调用matla导出的dll,实现vc与matlab混合编程
Vc调用matlab导出的dll,实现vc与matlab混合编程
Vc调用matlab导出的dll,实现vc与matlab混合编程
写这篇博客的目的就是想把前段时间的工作交接下,让后来人接手这个项目的人迅速的入门。文章虽短,在项目初期可是搜刮了很多资料花了不少的时间。
为了与win7兼容,matlab应该安装2010a或2010b。Matlab7导出的dll在win7下的vc2010中不兼容。
1:首先为matlab选择编译器
在命名行窗口输入:mex -setup 按照提示选择vc2010
2:选择builder
输入:mbuilder -setup 同样选择vc2010
3:将使用matlab写成的代码封装成函数,确认无错后开始生成dll。
在命令行输入:mcc -W cpplib:h_single -T link:lib h_single.m
其中h_single是要导出的dll名称,h_single.m是matlab源文件。
不同版本的matlab生成dll的时间不一样,不知道我使用的matlab2012a为什么这么慢。
如果一切顺利,那么在.m文件目录下将会产生.lib,.dll,.h,.cpp,.ctf(matlab2010好像不再生成.ctf文件)等几个文件。我们需要使用.lib,dll,.h文件。
dll生成后,剩下的就是在vc中调用了。这跟使用其他dll是一样的。首先要包含dll头文件,除了要将本次生成的.lib文件填入:链接器-》输入内。还需要加入mclmcr.lib 和mclmcrrt.lib。最后将dll文件放在可执行文件目录下。matlab2010好像不再生成.ctf文件,因此不需要将ctf文件放在当前目录下,而在matlab7中却需要。
这些都只是准备工作,包含了头文件才能在vc内使用。传入matlab函数的数据是有一定格式的。因此需要将数据准备下,准备好之后传给matlab计算函数。至于传入的数据格式,可以参照我写过的代码,很简单。我也做了详尽的注释。
上面只是把整个过程简单的介绍一遍,如果有其他问题可以参考我的其他博文。包括具体编译器的设置,出现过的错误及解决方案。所有这些都在vc与matlab混合编程目录下/ithzhang/article/category/1120011
示例代码,注意传给dll导出函数的参数的类型:
[cpp] view plaincopy
#includestdafx.h
#includemyh_single.h
#includeh_single.h
/************************************************************************/
/* single_cal函数。单回路水平排列。 */
/* BY: ithzhang ithzhang@ */
/* date: 2012年4月11日 11:32 */
/* modify date:2012年4月12日19:47 改正matlab 生成的dll库无法多次被调用的bug*/
/* */
/* current:电流,p:3*2数组, 坐标 */
/* delta:步长,left:坐标系左起始点,right:坐标系右结束点, xy:传出,: */
/* 综合磁场强度数组。x:传出:水平磁场强度数组,y:垂直磁场强度数组。 */
/* 三数组长度均为:(right-left)/delta +1 */
/* */
/************************************************************************/
文档评论(0)