VC++6.0与MATLAB - R2010b混合编程实例 - 图文

更新时间:2023-09-28 16:26:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

VC++6.0与MATLAB R2010b混合编程实例

先安装MATLAB编译器: Mbuild -setup

选择y出现:

输入数字3后出现

然后输入y后出现

则Matlab编译器配置完成。 接着输入mex –setup 过程如上不再重复!

完成配置后,首先,在Matlab2010b中创建.m文件如下: function y = sincplot(n) x1 = 0.01:0.01:n*pi; y1 = sin(x1)./x1;

x2 = -n*pi:0.01:-0.01; y2 = sin(x2)./x2; y = [y2 y1];

plot([x2 x1],y)

保存为sinplot.m然后进行编译。在编译的时候特别注意以下几点: 在我的MATLAB编译时并不生成.ctf文件。 可以做如下修改:

打开MATLAB安装路径:

D:\\MATLAB\\R2010b\\toolbox\\compiler\\bundles

在bundles下正常情况下应该找不到cppsharedlib文件,只能找到csharedlib 那么我们就自己建一个文件命名为cppsharedlib,然后在里面输入 -C -W lib:%1% -T link:lib

加入-C只是为了生成.ctf文件。否则可能会导致不成功?. 接下来在命令窗口输入以下命令:

mcc -B cppsharedlib:libsincplot sincplot.m 编译产生的文件如下图所示:

(如果没有前面的设置则不能产生libsinplot.h只能产生一个sinplot.h最后导致失败)

其中我们要用到的文件为libsincplot.h,libsincplot.dll,libsincplot.lib,libsincplot.ctf。 接下来我们打开VC++6.0.创建一个名称为Sinplot的MFC单文档应用工程: 第一步:

第二步:选择Single document

第三步:点击Finish 工程创建完毕。

将MATLAB 2010b编译生成的libsincplot.h,libsincplot.dll,libsincplot.lib,libsincplot.ctf。 四个文件拷贝到刚建立的Sinplot工程中,并将libsincplot.dll和libsincplot.ctf。拷贝到Debug文件夹下。

然后对VC++6.0进行配置以便在VC中调用MATLAB动态链接库 1.点击:

TOOLS—options—detectories— includes files中添加MATLAB路径

D:\\MATLAB\\R2010b\\EXTERN\\INCLUDE

D:\\MATLAB\\R2010b\\EXTERN\\INCLUDE\\WIN32 Library files中添加

D:\\MATLAB\\R2010b\\EXTERN\\LIB\\WIN32\\MICROSOFT

以上设置是对VC软件进行的设置,只需设置一次即可。

2.进行项目必要的设置。

VC++主界面进入project>Settings,点C/C++选项卡,Category选择Preprocessor,Additional include directories下填入如下路径D:\\MATLAB\\R2010a\\extern\\include(你的MATLAB安装路径)

点“link”选项卡,Category选择General,在下面的Object/library modules 那栏的最后添加libsincplot.lib mclmcrrt.lib

其中libsincplot.lib,是MATLAB中编译时,产生的lib文件,两个库之间以及和其他库以空格隔开。 然后Category选择input,Additional library path下填写:D:\\MATLAB\\R2010b\\extern\\lib\\win32\\microsoft

然后点击OK完成对VC++6.0的配置。

以下为编程问题:

在CSinplotView的包含头文件 #include \

2 定义要用到的变量,maArray是MATLAB和VC的接口数据类型,红色的为增加的代码。

class CSinplotView : public CView {

protected: // create from serialization only CSinplotView(); DECLARE_DYNCREATE(CSinplotView) // Attributes public: CSinplotDoc* GetDocument();

// Operations public: mxArray *pArrayIn; mxArray *pArrayOut; int isOK; int m_isInView; // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSinplotView)

3 在构造函数中进行初始化:mclInitializeApplication,libsincplot1Initialize #include \#include \#include \#include \#include \#ifdef _DEBUG

#define new DEBUG_NEW #undef THIS_FILE

static char THIS_FILE[] = __FILE__; #endif

///////////////////////////////////////////////////////////////////////////// // CSinplotView

IMPLEMENT_DYNCREATE(CSinplotView, CView) BEGIN_MESSAGE_MAP(CSinplotView, CView) //{{AFX_MSG_MAP(CSinplotView) ON_COMMAND(plot, Onplot) //}}AFX_MSG_MAP // Standard printing commands ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) END_MESSAGE_MAP()

///////////////////////////////////////////////////////////////////////////// // CSinplotView construction/destruction CSinplotView::CSinplotView() { // TODO: add construction code here isOK = mclInitializeApplication(NULL,0); if (!isOK) { MessageBox(\初始化app失败\ } isOK=libsincplotInitialize(); if (!isOK) { MessageBox(\初始化lib失败\ } this->pArrayIn=NULL; this->pArrayOut=NULL; m_isInView=0; }

CSinplotView::~CSinplotView() { if(pArrayIn) { mxDestroyArray(pArrayIn); }

本文来源:https://www.bwwdw.com/article/e4jd.html

Top