问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么用matlab code封装matlab算法制作独立的动态链接库

发布网友 发布时间:2022-04-22 23:01

我来回答

1个回答

热心网友 时间:2022-05-02 03:38

一,设置操作系统的环境变量。

系统变量增加D:R2011abinwin32;D:R2011abin和E:Microsoft Visual Studio 10.0VCbin,这个分别是我的机器上matlab和VS安装目录下的路径。

系统变量设置完毕后需要重新启动计算机方能生效。

二,设置matlab的编译环境

在matlab中输入命令mex -setup,选择Microsoft Visual C++ 2010

再输入命令mbuild -setup 同样选择Microsoft Visual C++ 2010

p.s. 这一步中,在我自己配置的过程中,matlab可以很容易的识别出机器上装有的编译器以及他们的安装路径,其中包括VS2010,选择它就是了。也许有的环境下matlab不一定能找出VS2010中的VC编译器,这个怎么解决就不知道了。

三,matlab编译.m文件

输入mcc -W cpplib:yourfunLib -T link:lib yourfun.m

其中,yourfunLib是生成的DLL,Lib的前缀名字,也就是你最后可以是使用的DLL以及Lib库的名字;yourfun是你需要编译的.m函数。

编译完成后得到了下图中的一些文件:

这些文件中后缀为DLL,LIB,H的文件在VS调用的时候有用,其他文件目前没有使用。(这里我把yourfunLib指定为aetherLib了)

四,VS2010 的配置

新建一个控制台项目。

打开项目的属性页,针对这个项目做如下的设置:

1.VC++目录下的包含目录添加

D:R2011aexterninclude(matlab安装目录下的路径)

D:R2011aexternincludewin32  (matlab安装目录下的路径,下同)

C:UserslenovoDesktopaetheraether  (你自己新建的项目中的路径,下同)

2.VC++目录下的库目录添加

D:R2011abinwin32

D:R2011aexternlib

C:UserslenovoDesktopaetheraether

D:R2011aexternlibwin64microsoft

D:R2011aexternlibwin32lcc

D:R2011aexternlibwin32microsoft

3.c/c++中的常规里面的附加包含目录添加

D:R2011aexterninclude

4.连接器下面的常规中的附加库目录添加

D:R2011aexternlibwin32microsoft

5.连接器下面的输入中的附加依赖项添加

libeng.lib
libmat.lib
libmex.lib
libmx.lib
mclmcrrt.lib
mclmcr.lib
aetherLib.lib(这个是你自己用matlab生成的lib,前面的是matlab自身计算引擎中的lib)

在解决方案资源管理其中的头文件和资源文件中添加文件

1.在头文件中添加生成的.h文件

2.在资源文件中添加.lib,.dll文件

3.然后 把.h,.lib,.dll文件拷到你新建的项目的目录下。比如我把他们放到了C:UserslenovoDesktopaetheraether里面。

编写代码调用dll中的函数

dll中的函数的接口形式在.h文件的最后面给出了,你可以去翻看他接口形式。这里面的函数的输入输出参数都得是mwArray对象的常引用,关于这个类请读者自己去网上搜索资料。你需要搞明白的是mwArray是matlab公司专门针对“c++调用matlab生成的dll“ 而设计的类,因为你包含了matlab安装目录下的这些类,所以你可以在VS里使用它们。

下面是一段主函数的编写样例:

// newdll.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include
#include "engine.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 if(!libMyAddInitialize())
   {
    //initilize failed!!!"<<std::endl;
     std::cout<<"错误..."<<std::endl;
    return -1;

   }
 double a = 6;

double b = 9;

double c;
mwArray mwA(1, 1, mxDOUBLE_CLASS);

mwArray mwB(1, 1, mxDOUBLE_CLASS);

mwArray mwC(1, 1, mxDOUBLE_CLASS);

mwA.SetData(&a, 1);

mwB.SetData(&b, 1);
MyAdd(1, mwC, mwA, mwB);
c = mwC.Get(1,1);
cout<<c<<endl;
system("PAUSE");
 return 0;
}

这个dll中的函数只是实现了一个简单的两数相加的功能,是我做基本配置是使用的。

 #include "engine.h"
#include "mclmcr.h"
#include "mclcppclass.h"
#include "libMyAdd.h"       这些头文件是必须包含的,其中engine好像是包含了matlab计算引擎中的所有dll(还没有认真考证)

现在,运气好的话你应该能看到你预想中的输出了。如果出现了问题,比如找不到路径,不可访问等等各种错误,那只能你自己去解决了,我搞了整整3天,上面提到的错误都有遇到。  出了错误你可以尝试去百度搜索其他博客,更好的是去google用英文搜索相关的问题,一些社区里面也许有答案呢,matlab版主文档我倒是没仔细看,也许上面也有不错的帮助呢! good luck  to you!

备注:

1.我自己在搞的时候,遇到的问题是.m函数中本身就使用了c++语言编写的dll,然后再封装这个.m函数。这种情况下你得保证VS可以访问到你用到的那些用C++书写的dll。但是只要用mcc命令编译.m函数后,你在连接器下面的输入中的附加依赖项中只需添加.m 生成的dll函数就可以了,不需要添加那些c++代码生成的dll。这里建议你把matlab项目拷到VS项目中,直接在Vs项目中工作进行MCC编译。

 2.主函数代码中if(!libMyAddInitialize())是必须的。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
amd锐龙r75700g超频性价比装机方案,要核显性能综合表现超 架空电线故障如何排除 ...unexpected T_CONSTANT_ENCAPSED_STRING in 怎么解决这个错啊_百度... php错误Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_S... PHP出现如下情况 syntax error, unexpected T_ENCAPSED_AND_WHITES... php 如何捕获类似于Parse error: syntax error, unexpected T_CONSTA... 挂烫机如何熨西装 戗驳领西装怎么熨烫 西装前片怎么推拉拔烫 西装能不能拿去烫 MATLAB哪里有下啊 麻烦发个链接 在matlab中怎么编写接口和其他程序链接 matlab怎么生成动态链接库 matlab下载链接 蜂蜜和柠檬一起泡有什么作用 如何在Matlab中用链表 口臭尴尬,教你哪些妙招,5分钟就能解决口腔小问题? 朋友说漱口水可以去除口臭,是真的吗? 山西老陈醋除口臭的正确方法? 柠檬和蜂蜜泡水喝有什么好处 口腔里有臭鸡蛋味,有什么方法可以让口气清新,牙垢也少了? 蜂蜜加柠檬泡水有什么作用? 怎么可以除去口臭 治口臭最快最有效方法有哪些? 去除口臭的方法,要多久才会好? 不敢说话,牙黄又口臭,牙黄、口臭怎么办? 怎样快速去除口臭小窍门,去除口臭妙招 用醋漱口的好处? 喝醋就能解决长期口臭吗?? 岁我有口臭我每天用白酣刷牙可以吗? matlab 怎么链接四个点成四边形 matlab 怎样计算链路预测精度 如何在matlab上实现用马尔可夫链蒙特卡洛方法计算控制图平均运行链长(arl)? matlab链接数据库,curs = exec(conn,&#39;sqlquery&#39;)通不过是什么原因呢? matlab做的程序怎样做成网页链接让好友打开 马尔科夫链用matlab什么功能实现 有办法在matlab中读取并存储excel的超链接吗 matlab里面激励怎么输入,这里要一个4N的力 希望有能人能解答一下 求matlab simulink里面MPC模块的详细用法。拜托了!答案好再给200分。可以给链接, 关于matlab中的line函数作图,x4函数我用了line([0.5,0],[0.5,0.7788]),应该是把曲线链接到直线才对 c#怎样链接matlab? simulink(matlab7.0)中怎么将下面两个模块链接起来,直接连连不上,这个是绕线电机双馈调速仿真模型 物联卡,这种卡能否在手机上,上网使用,? 微信拉黑再删除永久加不上是真的吗? 怎么登陆爱奇艺账号? 手机怎么登录爱奇艺会员账号? 微信拉黑删除就永远加不了? 微信好友删除后再也加不上了是为什么? 有爱奇艺密码和账号怎么登陆? 拉黑再删除永久加不上?