matlab代码:

figure('NumberTitle','off','menubar','none','toolbar','none','name','Topo Image');
x=0:pi/100:2*pi;
y=2*exp(-0.5*x).*sin(2*pi*x);
plot(x,y)
%figure(1); %%
%figure('Visible','off')
%plot([1:100])
%figure(1)

代码下面有,添加滚动条的窗口,这个地方主要是一个事件,点击按钮后,调用matlab代码生成的dll进行运算,完后显示的结果窗口显示出来,完后移动窗口到指定位置

void Cmdi_matlab_movewindow20140810View::OnMatlab()
{// TODO: 在此添加命令处理程序代码
//  CProcessCtrl m_process;
//
//  m_process.DoModal();CProcessCtrl *m_process = new CProcessCtrl();m_process->Create(IDD_PROCESS,this);m_process->ShowWindow(SW_SHOW);m_process->m_processctrl.SetPos(10) ;if( !myfunInitialize()){MessageBox(_T("初始化失败"));}m_process->m_processctrl.SetPos(30) ;fun();// terminate MCRmclTerminateApplication();CString wnd_name = "Topo Image";m_process->m_processctrl.SetPos(40) ;HWND hFig=::FindWindow(NULL,wnd_name);//wnd_name为matlab figure的名称,//此处需循环多次才能得到句柄,不知为啥while(hFig==NULL){hFig=::FindWindow(NULL,wnd_name);}m_process->m_processctrl.SetPos(60) ;//::ShowWindow(hFig, SW_HIDE); ModifyStyle(hFig,WS_POPUP,WS_CHILD,NULL); long IStyle=::GetWindowLong(hFig,GWL_STYLE); //获得figure的属性//ModifyStyle(hFig,WS_POPUP,WS_CHILD,NULL); //CWnd* pMainWnd =AfxGetMainWnd();//CRect client_rect;CRect figure_rect;CWnd *myfigure = GetDlgItem(IDC_STATIC_MATLABWND);myfigure->GetClientRect(&figure_rect);//pMainWnd->GetClientRect(&client_rect);long fig_width=figure_rect.Width();long fig_height=figure_rect.Height();m_process->m_processctrl.SetPos(80) ;::SetParent(hFig,myfigure->GetSafeHwnd());//设置figure的父窗口::SetWindowLong(hFig,GWL_STYLE,IStyle & (~WS_CAPTION) & (~WS_THICKFRAME));//设置figure的属性,去掉标题栏::SetWindowPos(hFig,NULL,0,0,fig_width,fig_height,SWP_NOZORDER|SWP_NOACTIVATE);//m_process->UpdateData(false);m_process->DestroyWindow();::ShowWindow(hFig,SW_SHOW);  //显示设置完后的figure::SetForegroundWindow(this->m_hWnd);//::UpdateWindow(hFig); //刷新//::UpdateWindow(myfigure->m_hWnd); //刷新}

实现效果:

之前配置的过程主要参考了下面的链接:

http://blog.csdn.net/stardust94605/article/details/8972064

下面是文章内容:

vs2010和Matlab R2012b 混合编程

思路:为了实现matlab与C++混合编程,采用由m文件构造动态链接库然后在visual studio中调用的方法。

本人系统:Windows 7旗舰版(32位),VS2010旗舰版,Matlab R2012b    只有R2010b或以上版本才识别VS2010编辑器

1. matlab中dll创建

1.1    m文件编写

function [ yt ] = myfitline( x,y,m,xrange,t )
         %xy为坐标向量,m为多项式阶数,xrange为显示图上面的坐标范围,t为要求的坐标横轴位置
         %   Detailed explanation goes here
         p=polyfit(x,y,m);%计算各阶系数p1x^m+p2x^(m-1)+....+ pmx+ p(m+1)
         yy=polyval(p,xrange);%计算一个区域内的函数值用于画图
         yt=polyval(p,t);   %  计算指定x下的函数对应的y值
         plot(x,y,'r*',xrange,yy,'b')
         end

1.2   设置编译器

>> mex -setup   选择VS2010

>> mbuild -setup  选择VS2010

>> mcc -W cpplib:Myfitline -T link:lib myfitline     (这就创建好了)

其中,mcc是Matlab提供的编译命令,对于这一点,Matlab的帮助说明如下:
               -W lib:string link:lib其中-W是控制编译之后的封装格式,cpplib,是指编译成C++的lib,cpplib冒号后面是指编译的库的名字,-T表示目标,

link:lib表示要连接到一个库文件的目标,目标的名字是后面的myfitline,即你写的m函数的名字。
              运行完之后,你的目录下面,将会出现以下一些文件:
              Myfitline.cpp
              Myfitline.exp
              Myfitline.dll
              Myfitline.exports
              Myfitline.h
              Myfitline.lib
              mccExcludedFiles.log
              readme.txt
              具体每一个文件的意思,请查帮助,这里只说其中很有用的几个:
              Myfitline.dll是编译好的动态库,myfitline这个函数封装在里面,Myfitline.h是对应的头文件,在C里面调用这个函数的时候,需要include这个头文件,

在这个头文件的最后,你可以看到下面的内容:
              extern LIB_Myfitline_CPP_API void MW_CALL_CONV myfitline(int nargout, mwArray& yt, const mwArray& x,
              const mwArray& y, const mwArray& m, const mwArray& xrange, const mwArray& t);

这就是myfitline的C函数的声明。nargout表示输出变量的个数,其他就是对应了m函数的几个变量。

注意,变量的类型是mwArray,这是Matlab提供的一个特殊的变量类型(在7.0的版本,编译之后,变量类型是mxArray)。mwArray是一个类,具体可以查帮助。

2.系统环境配置

Computer - > Properties -> Advanced system settings -> Environment Variables -> User Variables -> path, 添加(MATLAB下为MATLAB 2012软件安装目录)

...\MATLAB\extern\lib\win32\microsoft;

...\MATLAB\bin\win32

Computer - > Properties -> Advanced system settings -> Environment Variables -> System Variables -> path, 添加

...\MATLAB\runtime\win32;

...\MATLAB\bin;

...\MATLAB\extern\lib\win32\microsoft;

...\MATLAB\bin\win32

3.vs2010环境配置

①Property Pages -> VC++ Directories -> Include Directories, 添加(安装目录下)

...\MATLAB\extern\include\

②Property Pages -> VC++ Directories -> Library Directories, 添加

...\MATLAB\extern\lib\win32\microsoft

③Property Pages -> C/C++ -> General -> Additional Include Directories, 添加

...\MATLAB\extern\include\

④Property Pages -> Linker -> General -> Additional Library Directories, 添加

...\MATLAB\extern\lib\win32\microsoft

⑤Property Pages -> Linker -> Input -> Additional Dependencies, 添加

libeng.lib

libmat.lib

libmex.lib

libmx.lib

mclmcrrt.lib

mclmcr.lib

Myfitline.lib

    4.vs2010下完成程序

把刚才生成的*.h *.dll *.lib文件复制到刚刚新建的工程的文件夹下,并且用添加—现有项添加的工程中。(此处的*代表你的m文件名称)

调用函数 myfitline的文件前要

#include "mclmcr.h"

#include "matrix.h"

#include "mclcppclass.h"

#include "Myfitline.h”

具体程序如下:

void CNewFeatureofStormView::Onposition()
            {
                 // TODO: 在此添加命令处理程序代码
                 if( !MyfitlineInitialize())
                 {
                     MessageBox(_T("初始化失败"));
                  }
                 // 为变量分配内存空间,可以查帮助mwArray
                  mwArray mwX(5, 1, mxDOUBLE_CLASS); // 5,1表示矩阵的大小(所有maltab只有一种变量,就是矩阵,
                  mwArray mwY(5, 1, mxDOUBLE_CLASS);//为了和Cpp变量接轨,设置成1*5的矩阵,mxDOUBLE_CLASS表示变量的精度)
                  mwArray mwM(1, 1, mxDOUBLE_CLASS);
                  mwArray mwXR(50,1, mxDOUBLE_CLASS);
                  mwArray mwYT(1,1, mxDOUBLE_CLASS);
                  mwArray mwT(1,1, mxDOUBLE_CLASS);
                  int x[5]={432,435,438,441,443};    //样本点坐标
                  int y[5]={136,138,140,145,147};    //
                  int xr[50],m=3,t=446;           //参数设置
                  for (int i=400;i<450;i++)
                  {
                      xr[i-400]=i;
                  }
                  mwX.SetData(x, 5);      //调用类里面的SetData函数给类赋值
                  mwY.SetData(y, 5);
                  mwM.SetData(&m, 1);
                  mwXR.SetData(xr, 50);
                  mwT.SetData(&t, 1);
                  myfitline(1,mwYT,mwX,mwY,mwM,mwXR,mwT);
                  double c = mwYT.Get(1, 1); //调用类里面的Get函数获取取函数返回值
                  CString strNumber;
                  strNumber.Format(_T("%lf"),c);
                  MessageBox(strNumber, _T("坐标"));
                  // 后面是一些终止调用的程序
                  MyfitlineTerminate();
                  // terminate MCR
                 mclTerminateApplication();
            }

转载于:https://www.cnblogs.com/wangyaning/p/4237000.html

vs 2010调用matlab dll显示窗口核心代码相关推荐

  1. c怎么调用matlab dll,matlab和c++调用DLL方法(最新整理)

    <matlab和c++调用DLL方法(最新整理)>由会员分享,可在线阅读,更多相关<matlab和c++调用DLL方法(最新整理)(6页珍藏版)>请在人人文库网上搜索. 1.M ...

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

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

  3. VS C++ 和 MCR 调用MATLAB DLL

    #最开始尝试了MFC+matlab DLL的方法 C++还没玩通 最后还是放弃MFC了 看的经验没有给出MFC的完整程序 运行环境 MCRuntime 9.8 (MATLABR2020A) VS201 ...

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

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

  5. C++调用matlab dll报错:Invalid input:Null runtime instance

    一.报错截图如下: 二.操作过程如下: 1.先是使用vs2015打开了vs2017的C++工程,编译运行后没有异常出现: 2.后再用vs2017打开工程,执行调用matlab的函数时报如上错误. 三. ...

  6. C++调用matlab dll

    1. 编写matlab函数 2.  命令行输入 mex -setup 选择 mex -setup C++ 3. 命令行输入 mbuild -setup 选择 mex -setup C++ -clien ...

  7. c#调用c++dll找不到入口点,一秒搞定

    看了那么多人在网上解决这个问题.博主自己也捣腾半天.结果发现解决方法如此简单! 这是我的C#程序里调用c++ dll的一段代码,相信大家都会用. [DllImport("vc6dll.dll ...

  8. Electron-vue开发桌面应用调用TSCLIB.dll(tsc标签打印机连接库)

    最新,最终解决方案http://t.csdn.cn/szQRy 原因:要做个防伪标签打印软件,打印数据是来自服务器.最开始用的是JavaScript调用TSC来做打印(只能用IE浏览器,使用人员总会无 ...

  9. matlab调用com,com方式调用matlab(四)

    目录 com方式调用matlab(一) com方式调用matlab(二) com方式调用matlab(三) com方式调用matlab(四) com方式调用matlab(五)        com方式 ...

  10. 【Qt】控件——QPlainTextEdit使用简单介绍:常用方法及信号、逐行读取编辑框的内容、使用自带的快捷菜单、作为日志显示窗口

    Qt控件-QPlainTextEdit使用 参考链接: https://blog.csdn.net/seniorwizard/article/details/109726147; https://bl ...

最新文章

  1. Spring源码分析之 lazy-init 实现原理
  2. win8mysql安装教程zip_mysql 8.0.18.zip安装配置方法图文教程(windows 64位)
  3. C++读写EXCEL文件方式比较 .
  4. 算法学习:最小圆覆盖
  5. ChaosBlade 在工商银行混沌工程体系中的应用实践
  6. Active Diretory 全攻略(三)--建立域(5)
  7. C#LeetCode刷题之#345-反转字符串中的元音字母​​​​​​​(Reverse Vowels of a String)
  8. 智能会议系统(30)---WebRTC学习之一:开篇
  9. raid5 合适 多少块硬盘_分析Linux raid6同步成raid5导致数据丢失的情况
  10. Oracle数据库基本操作
  11. 【MYSQL快速入门】常用函数:日期函数
  12. Tally项目笔记001
  13. 智慧城市、智慧工地、平安城市、雪亮工程等监控项目中应用SkeyeVSS国标GB28181流媒体服务
  14. “创作大师——(PyTorch)RNN”
  15. hao123站长李兴平的成功史
  16. 最后一批90后开始养生了,中医科普短视频会火吗?
  17. Gradual Warmup Scheduler
  18. 使用CenterNet训练自己的数据集
  19. 微信小程序 java多商家多用户网上商城购物系统#计算机毕业设计
  20. as.net core 5.0 Configuration读取consul的kv存储

热门文章

  1. 札记:Fragment基础
  2. 分红酒 - 蓝桥杯 - 已更新
  3. MongoDB命令学习
  4. 一文看懂测试自动化的玄妙
  5. STM32F103 mbed输出互补pwm
  6. centos7搭建smb服务
  7. 记一次VS Code崩溃的解决(Win10扫描自动回复系统文件)
  8. 麦达数字SaaS布局再落子9300万投资赢销通
  9. 【BZOJ28323874】宅男小C [模拟退火][贪心]
  10. Java基础Character类、Math类、Date类、DateFormat类、Calendar类