我用的是VC6与Matlab2011A

装饰Matlab代码编译成DLL文件老失败,搞了好久没找到原因,请教各位!

以下是网上的算例,照着做了,就是不能初始化DLL。

发表于: 2007-10-18 17:35:31 我的开发环境是:Matlab 7.0 和 VC++6.0(mbuild环境已配置好)

编程步骤:

1、在Matlab中编写一个Draw.m文件,文件内容为:

%实现输入x1与x2,然后绘制sin曲线,然后生成两个随机数并输出

function [X1,Y1]=Draw(x1,x2)

x=x1:0.1:x2;

y=sin(x);

X1=rand(1);

Y1=rand(1);

plot(x,y,X1,Y1,'*');

2、利用命令 mcc -W cpplib:Draw -T link:lib Draw.m 生成DLL;

3、新建一个VC++工程(基于对话框的)

4、拷贝draw.h、Draw.dll、Draw.lib及Draw.ctf到VC++工程目录中,并将Draw.h 加入到当前工程中;

5、设置环境:Project->Setting->Link->Category :Input->Object/library modules:mclmcr.lib Draw.lib;

6、在对话框的头文件中加入 #include "draw.h" 与 #include "mclmcr.h";

7、在对话框的OnInitDialog()事件中进行 MATLAB 库文件的初始化,在对话框的OnDestroy()事件中进行 MATLAB 库文件资源的释放,代码如下:

BOOL CMatlabDrawInputXYDlg::OnInitDialog()

{

CDialog::OnInitDialog();

……………

// TODO: Add extra initialization here

/* Call the mclInitializeApplication routine. Make sure that the application

* was initialized properly by checking the return status. This initialization

* has to be done before calling any MATLAB API's or MATLAB Compiler generated

* shared library functions.  */

if( !mclInitializeApplication(NULL,0) )

{

AfxMessageBox( "Could not initialize the application.");

exit(1);

}

/* Call the library intialization routine and make sure that the

* library was initialized properly. */

if (!DrawInitialize())

{

AfxMessageBox("Could not initialize the library.");

exit(1);

}

return TRUE;  // return TRUE  unless you set the focus to a control

}

void CMatlabDrawInputXYDlg::OnDestroy()

{

CDialog::OnDestroy();

/* Call the library termination routine */

DrawTerminate();

mclTerminateApplication();

}

8、在窗体界面上放置两个编辑框(用于输入起始值和终止值,并设置变量m_X1和m_X2,均为double类型)和一个按钮;

9、编辑按钮单击事件代码,如下:

void CMatlabDrawInputXYDlg::OnBUTTONDraw()

{

// TODO: Add your control notification handler code here

double Data_X1[1],Data_X2[1];

double Data_Out1[1],Data_Out2[1];

CString strPromt;

mwArray m_InX1(1,1,mxDOUBLE_CLASS);

mwArray m_InX2(1,1,mxDOUBLE_CLASS);

mwArray m_OutX1(1,1,mxDOUBLE_CLASS);

mwArray m_OutX2(1,1,mxDOUBLE_CLASS);

UpdateData(TRUE);

Data_X1[0]=m_X1;

Data_X2[0]=m_X2;

m_InX1.SetData(Data_X1,1);

m_InX2.SetData(Data_X2,1);

draw(2,m_OutX1,m_OutX2,m_InX1,m_InX2);

//extern void mlxDraw(int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]);

//extern void draw(int nargout, mwArray& X1, mwArray& Y1, const mwArray& x1, const mwArray& x2);

m_OutX1.GetData(Data_Out1,1);

m_OutX2.GetData(Data_Out2,1);

strPromt.Format("X1= %.6f",Data_Out1[0]);

AfxMessageBox(strPromt);

strPromt.Format("Y1= %.6f",Data_Out2[0]);

AfxMessageBox(strPromt);

}

10、编译通过,运行正常

matlab生成的dll初始化失败,VC调用Matlab编译的DLL,老初始化失败相关推荐

  1. vc调用matlab生成的C++dll库总结。

    实验室的一个项目需要调用matlab程序.经过再三考虑,决定使用vc调用matlab导出库的形式.而我主要负责与matlab程序结合的工作.以下是今天工作的简要总结.全当是个备忘吧. 1:在matla ...

  2. vc只能调用matlab子函数,VC调用matlab函数

    最近在学习matlab,先试一个VC调用matlab函数的简单例子 用的是VC++6.0,matlab7.8也就是matlabR2009 首先在matlab下设置环境 >> mbuild ...

  3. VC调用MATLAB 产生的dll文件

    1.当然是先建立matlab的m文件. 我在matlab中定义了一个函数, 其m文件如下: function re=add(C) N=73;alpha=(0.2)*(pi/2); Ts=sqrt(2* ...

  4. VC调用matlab中定义的.m文件中的函数的实例

    Matlab是一个强大的数学计算/仿真工具,其内置了很多实用的现成的函数,而且我们经常也自己定义很多m函数.但在很多情况下,我们不得不使用VC编程.那么,如何在VC中利用matlab的资源呢?在这里我 ...

  5. VC调用C#写的DLL

    From: http://hi.baidu.com/ocnc/blog/item/2c7fc45c1d1f1051fbf2c0ea.html VC中调用C#写的DLL时,对C#这边的DLL有要求,即要 ...

  6. 调用matlab dll报错,c#调用MATLAB的dll时出错

    MATLAB是2014a,VS是2013的. 在C#中调用matlab生成的dll文件时,ceshi.Class1 yaoyi = new Class1();  对类进行实例时,抛出异常.异常为: 未 ...

  7. matlab读mif文件,关于QuartusII里面调用MATLAB里生成的mif文件的一些问题(转)

    关于QuartusII里面调用MATLAB里生成的mif文件的一些问题(转) 最近做DDS正弦信号发生器,需要用到MATLAB生成一个正弦信号的ROM(MIF文件).首先在MATLAB里面建立一个M- ...

  8. cvi调用matlab dll,cvi通过artix调用matlab

    [实例简介] cvi通过artix调用matlab,官方例程改的,不过官方例程一般人运行不起来,因为库不匹配,这个是matlab2015b32位和cvi2017的 [实例截图] [核心代码] f403 ...

  9. vc 调用matlab figure 画图

    我的环境 matlab7.0, vs2012.执行mex -setup 和mbuild -setup 是选的vc6,vs执行命令的时候不可见 参考1:http://www.ilovematlab.cn ...

最新文章

  1. 「炫富」的GPT-3来了:31位作者,45TB数据,72页论文,1750亿个参数,会编故事,还会三位数加减法...
  2. 获取预制体_基于弱磁探测技术的轴承滚动体转速检测方法研究
  3. Spring 的优点
  4. 使用JavaFX AnimationTimer
  5. hadoop中两种上传文件方式
  6. vue 固定div 滚动_vue.js-div滚动条隐藏但有滚动效果的实现方法
  7. 总结!进入libvirt的虚拟化世界(一)得到libvirt的连接
  8. Go 语言学习总结(5)—— Go 学习笔记总结
  9. 使用正则表达是搜索多个字符串,表达式中加入变量
  10. 多线程----简单的生产者和消费者
  11. matlab bode 频率,matlab – bode和freqz之间的区别
  12. 物联网平台开发接口http/mqtt,支持部标808/1078协议对接
  13. 梅花雪MzTreeView2.0 的checkbox完全攻略
  14. Cesium geojson 区域拉伸高度
  15. 如何用python整理表格_Python 自动整理 Excel 表格
  16. Java Swing事件处理——键盘事件及监听处理 KeyListener 按键测试
  17. 【GIS开发】VB6.0下MO控件的安装:安装教程及MO破解教程(MapObjects2.x)
  18. 可能是东半球最全的RxJava使用场景小结
  19. 3 MySQL数据管理
  20. 逐行分析鸿蒙系统的 JavaScript 开发框架

热门文章

  1. 《构建中小型网络实训》实训课程
  2. 观点丨非洲区块链概览
  3. 计算机一级ms office应用题,计算机一级考试MSOffice练习题(含答案)
  4. 数据结构——二路归并排序
  5. Cisco 交换、路由和无线基础期末考试答案
  6. 中国轮胎行业前景规划及未来发展趋势展望报告2022-2028年版
  7. slackware linux,seamonkey引起的rpm2tgz问题
  8. 快速更改Windows 8/8.1的磁盘IDE/AHCI模式
  9. java之class文件解析
  10. [反汇编练习]160个CrackMe之001