vc 6.0与matlab,matlab7.0与vc6.0混编

我已经测试成功,比网络上其他的方案明了,而且精确,没有多余的步骤

==============================================================

凡兄弟 发表于 2005-11-9 14:30:32

VC + MATLAB7 C Shared Library

所有调用MATLAB7

Compiler产生的共享库的程序都具有如下的大致结构:

1. 声明变量或者是函数作为输入变量;

2. 调用

mclInitalizeApplication函数,并测试是否成功,该函数设置了一个全局的MCR状态,并且构建MCR实例;

3.

对于每个库,调用一次Initalize函数,为库创建一个MCR实例;

4. 调用库中的函数,并处理其结果(这是程序的主要部分);

5.

为每个库调用一次Terminate函数,用于注销相联系的MCR;

6.

调用mclTerminateApplication函数,释放与全局MCR状态相联系的资源;

7. 清除变换,关闭文件等,然后退出。

根据MATLAB的帮助文档中提供的例子,利用如下文件进行练习:

/extern/examples/compiler/addmatrix.m

/extern/examples/compiler/multiplymatrix.m

/extern/examples/compiler/eigmatrix.m

实现步骤:

1)

先将这几个文件拷贝到当前目录下,然后利用mcc创建共享库,指令如下:

mcc –v -B csharedlib:libmatrix addmatrix.m multiplymatrix.m

eigmatrix.m

其中,操作参数 -B csharedlib 是一个绑定的操作,其等效指令为 -W

lib: -T link:lib。

2)在VC中创建一个MFC工程(本人创建的为基于对话框的),环境设置根据如下帖子:怎样设置

Visual Studio 与 Matlb Complier 4.0 一起工作

中的指导进行。在本例子中,只需要在VC中进行如下步骤:

A. Tools->Options->Directories->Show directories

for:Include files-> \Extern\Include;

B. Tools->Options->Directories->Show directories

for:Library files->

\Extern\Lib\Win32\Microsoft\msvc60;

C. Project->Setting->C/C++->Category:Code

Generation->Use run-time library:Debug Multithread DLL;

D.

Project->Setting->Link->Category:Input->Object/library

modules:mclmcrrt.lib libmatrix.lib(mcc生成的共享库)。

3)拷贝MATLAB当前目录下刚才用mcc生成的libmatrix.h,libmatrix.dll,libmatrix.lib,以及

libmatrix.ctf文件到VC当前工程目录下,并用Project->Add to

Project->Files…将libmatrix.h加入到当前工程中。

4)在当前工程的对话框的头文件中加入#include "libmatrix.h" 与

#include "mclmcr.h";

5)在BOOL

CMatlab7dllDlg::OnInitDialog()中进行MATLAB库文件的初始化,在void

CMatlab7dllDlg::OnDestroy()中进行MATLAB库文件资源的释放,否则可能出现按钮只能够按一次,第二次运行则出错的现象;

6)调用MATLAB产生的库文件中函数的处理函数定义在一个按钮的响应函数中,并且要注意的是:如果一个mxArray变量需要重用的时候,必须用mxDestroyArray(out);

out=0;即先进行变量注销,再设置为空。

附上这几个主要函数如下:

1.BOOL CMatlab7dllDlg::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 s.  */

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

(!libmatrixInitialize())

{

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

exit(1);

}

return TRUE;  // return TRUE

unless you set the focus to a control

}

2.void

CMatlab7dllDlg::OnDestroy()

{

CDialog::OnDestroy();

/* Call

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值