自家自制梨罐头的方法:程序中使用MATLAB编译产生的DLL (VC6.0, MATLAB R2010b, mw...
来源:百度文库 编辑:中财网 时间:2024/04/30 03:29:39
最近需要在VC下调用MATLAB的dll,以前没怎么接触过这些,今天特地摸索了一下。主要借鉴的是taohe兄的这篇帖子:http://forum.simwe.com/thread-801187-1-1.html
但不同的是我现在用的MATLAB是R2010b,而VC是6.0,两个产品时间间隔达10多年之久。taohe兄的实验环境是vs2005,MATLAB 2007b两个产品时间间隔还是比较接近的。
之前按照taohe兄帖子里的步骤实现,发现总是无法成功,出现N多各种奇怪错误,譬如:error C2065: 'mclInitializeApplication_proxy' : undeclared identifier 之类的奇怪错误提示(后来才知道这是 2008a以后,Mathworks公司对mclmcrrt.h 和 mclmcr.h头文件做了修改,要求mclmcr.h必须include在mclmcrrt.h之后。)
现将操作步骤写下:
1、编写测试m函数,这个不变,即如下:
3、VC下新建控制台程序,步骤如下:file>new,选择Win32 Console Application,右侧project name 填写
在下一个界面选“a simple application”finish点OK。
至此程序框架搭好,将libmyadd2.dll,libmyadd2.h,libmyadd2.lib和libmyadd2.ctf复制到testmyadd2_r2010b工程目录下。
并将libmyadd2.h添加到Header files组内。
4、进行项目必要的设置(注意这里和VC2005有较大不同)。vc主界面进入project>Settings,点C/C++选项卡,Category选择Preprocessor,Additional include directories下填入如下路径
点“link”选项卡,Category选择General,在下面的Object/library modules 那栏的最后添加
然后Category选择input,Additional library path下填写:
至此配置完毕
5、打开testmyadd2_r2010b.cpp文件,在#include "stdafx.h"后添加
但不同的是我现在用的MATLAB是R2010b,而VC是6.0,两个产品时间间隔达10多年之久。taohe兄的实验环境是vs2005,MATLAB 2007b两个产品时间间隔还是比较接近的。
之前按照taohe兄帖子里的步骤实现,发现总是无法成功,出现N多各种奇怪错误,譬如:error C2065: 'mclInitializeApplication_proxy' : undeclared identifier 之类的奇怪错误提示(后来才知道这是 2008a以后,Mathworks公司对mclmcrrt.h 和 mclmcr.h头文件做了修改,要求mclmcr.h必须include在mclmcrrt.h之后。)
现将操作步骤写下:
1、编写测试m函数,这个不变,即如下:
- function [y,z] = myadd2(a, b)
- % dummy function, just to demonstrate the idea
- y = a+b;
- z = a+2*b;
- end
- mcc -W cpplib:libmyadd2 -T link:lib myadd2.m -C
3、VC下新建控制台程序,步骤如下:file>new,选择Win32 Console Application,右侧project name 填写
- testmyadd2_r2010b
在下一个界面选“a simple application”finish点OK。
至此程序框架搭好,将libmyadd2.dll,libmyadd2.h,libmyadd2.lib和libmyadd2.ctf复制到testmyadd2_r2010b工程目录下。
并将libmyadd2.h添加到Header files组内。
4、进行项目必要的设置(注意这里和VC2005有较大不同)。vc主界面进入project>Settings,点C/C++选项卡,Category选择Preprocessor,Additional include directories下填入如下路径
- F:\MATLAB\R2010b\extern\include
点“link”选项卡,Category选择General,在下面的Object/library modules 那栏的最后添加
- libmyadd2.lib mclmcrrt.lib
然后Category选择input,Additional library path下填写:
- F:\MATLAB\R2010b\extern\lib\win32\microsoft
至此配置完毕
5、打开testmyadd2_r2010b.cpp文件,在#include "stdafx.h"后添加
- #include
- #include "libmyadd2.h"
- return 0
- std::cout << "Hello world!" << std::endl;
- /* Initialize the MCR */
- if( !mclInitializeApplication(NULL,0) )
- {
- std::cout << "Could not initialize the application!" << std::endl;
- return -1;
- }
- // initialize lib
- if( !libmyadd2Initialize())
- {
- std::cout << "Could not initialize libmyadd2!" << std::endl;
- return -1;
- }
- try
- {
- // declare and initialize a
- mwArray a(2, 2, mxDOUBLE_CLASS);
- double *aData;
- aData = new double[4];
- int i;
- for( i=0; i<4; ++i)
- {
- aData[i] = 1.0*i;
- }
- // print output
- std::cout << "a = " << std::endl;
- std::cout << aData[0] << ",\t" << aData[1] << std::endl;
- std::cout << aData[2] << ",\t" << aData[3] << std::endl;
- a.SetData(aData, 4);
- // declare and initialize b
- mwArray b(2, 2, mxDOUBLE_CLASS);
- b(1,1) = 11.;
- b(1,2) = 12.;
- b(2,1) = 21.;
- b(2,2) = 22.;
- mwArray y(2, 2, mxDOUBLE_CLASS);
- mwArray z(2, 2, mxDOUBLE_CLASS);
- // call the function
- myadd2(2, y, z, a, b);
- // copy data from mwArray to C++ objects
- // allocate outputs
- double *yData, *zData;
- yData = new double[4];
- if( yData == NULL )
- {
- std::cout << "Failed to allocate memory for yData!" << std::endl;
- return -1;
- }
- zData = new double[4];
- if( zData == NULL )
- {
- std::cout << "Failed to allocate memory for zData!" << std::endl;
- return -1;
- }
- // copy data from mwArray to C++
- y.GetData(yData, 4);
- z.GetData(zData, 4);
- // print output
- std::cout << "y = " << std::endl;
- std::cout << yData[0] << ",\t" << yData[1] << std::endl;
- std::cout << yData[2] << ",\t" << yData[3] << std::endl;
- std::cout << "z = " << std::endl;
- std::cout << zData[0] << ",\t" << zData[1] << std::endl;
- std::cout << zData[2] << ",\t" << zData[3] << std::endl;
-
- // deallocate memory
- delete [] aData;
- delete [] zData;
- delete [] yData;
- }
- catch( const mwException& e)
- {
- std::cerr << e.what() << std::endl;
-
- }
- // terminate the lib
- libmyadd2Terminate();
- // terminate MCR
- mclTerminateApplication();
有关matlab程序编译为独立应用程序的问题
PB中如何调用MATlab的程序?
在VF中通过编译生成的.DLL文件怎么使用啊!请高手指教!!谢谢~~
如何使用*.DLL在程序中?
在C++程序中如何使用DLL
关于使用MATLAB进行DSP程序开发的问题
在C程序编译的时候花括号“{ }“怎么使用???
MATLAB程序的运行
matlab 中如何使用跳转
MATLAB中使用二维离散小波的好处
使用VC6.0编译的时候说.DLL文件没有找到?是怎么回事啊!
请问在matlab中产生一定范围内的随机数的函数
请问delphi中如何调用C++编译的dll中的导出类
matlab如何产生最大范围的随机数?
delphi写的dll文件怎么编译?
c++程序在MATLAB中怎么表示
怎样在java编译计算器程序的时候在程序中添加开关按钮?
关于使用MATLAB/simunlin进行DSP程序开发的问题
在VB中调用matlab,把vb数据传到用matlab编写的EXE文件,产生输出数据,再传给VB.怎么做?
Matlab程序
Matlab 使用
VC中编译的问题
matlab中一个灰度图通过高通、低通、带通后的程序
急求,matlab在自适应均衡中RLS和LMS算法的程序