matlab 引擎实现混合编程
网上给的非常多的是这个例子。这个例子很老了,而且里面有很多函数都过时了,matlab6.1 以后又增加了一些函数。所以到从昨晚搞到现在,最后也没能运行。抱歉了向东,项目那边比较紧,实在不能再在这里耗着了,这事只能先给你放这里了。
哎。可见混合编程这边使用的人数也不是那么多。
---------------------------------------------------------分割线----------------------------------------------------------------------------------- 2. 实现方式
Matlab提供了可外部连接的DLL文件,通过将其转换为相应的Lib文件,并加以必要的设置,就可以在C++Builder中直接进行Matlab函数调用,实现C++ Builder语言与Matlab语言的混合编程。
(1) 运行环境要求
由于Matlab提供的是32位的DLL。其运行环境要求是Matlab V4.2或更高版本。C++Builder可以进行32位编程,这里我们采用的是V3.0版本。
(2) C++Builder下LIB文件的生成
Matlab提供的Def文件允许用户通过Implib命令生成相应的Lib文件。其命令格式为 Implib ???.lib ???.def
在/extern/include目录下,提供了如下三个.Def文件:
_libeng.def,_libmat.def,_libmx.def
通过上述命令可以生成相应的三个Lib文件。这些Lib文碱中包含了可外部调用的Matlab函数的必要信息。
二、实现计算和绘图
为清楚起见,通过一个简单的CBuilder例程进行说明。该实例通过调用Matlab实现矩阵运算并绘制图形,来演示C++Builder对Matlab的调用。
在C++Builder编辑环境中,建立一个新的窗体MyForm,并放置一个按钮Demo。将工程文件命名为Try.prj,其主函数为try.cpp。在主函数中,我们将使用一个实现Matlab调用的子函数DemoMatlab,作为按钮Demo的响应事件。其源代码如下:
#include #pragma hdrstop #include "Unit1.h" #pragma package(smart_init) #pragma resource "*.dfm" TMyForm *MyForm; __fastcall TMyForm::TMyForm(TComponent* Owner) : TForm(Owner) { } void __fastcall TMyForm::DemoClick(TObject *Sender) { DemoMatlab(); //演示Matlab语言调用 } |
为了调用Matlab中的函数,必须进行必要的设置,将包含这些函数的文件加入工程文件Try.prj。以下是操作过程:
1. 在头文件中加入Engine.h。其包含了启动Matlab调用和关闭的函数声明。
2. 打开Project|Option...对话框,点击Directories/Conditionals。
● 在Include Path中,加入目录路径/extern/include,该路径包含了engine.h和matlab.h等有用的头文件。
● 在Library Path中,加入/bin和/extern/include。这两个目录路径包含了可外部调用的DLL和LIB文件。
3. 点选Project|Add to Project...对话框,加入如下库文件:
_libeng.lib,_libmat.lib和_libmx.lib。
在进行了这些必要的设置之后,我们就可以选用适当的函数来实现目标。 以下是子函数DemoMatlab的程序代码。
void DemoMatlab ---------------------------------------------------------分割线---------------------------------------------------
|
哎。失败。