發(fā)信人: loveabc (
螃蟹), 信區: VisualC
標 題: Re: 關(guān)于VC調用Matlab的問(wèn)題
發(fā)信站: BBS 水木清華站 (Tue Apr 4 13:34:05 2000)
標 題: vc++調用matlab5 engine (畫(huà)圖)
1 生成幾個(gè)連接庫文件 在目錄 c:\matlab\extern\include 下找這幾個(gè)文件:
libeng.def libmx.def libmat.def 在DOS行命令下生成三個(gè)庫文件:
c:\msdev\bin\lib /def:lib???.def /out:lib???.lib 把生成的三個(gè)LIB文件加入你的
LINK項
2 寫(xiě)包含engine
功能的文件 可以參考: c:\matlab\extern\examples\eng_mat\engwind
em
o.c
注意: 一定要用.C做后綴! 比如:MATLAB.C
3 設置編譯選項 把MATLAB.C加入你的PROJECT
在Project->Settings->C/C++->Precompiled Headers里面選Automatic...
MATLAB.C的開(kāi)頭不要用#INCLUDE "stdafx.h",要包含什么, 自己看情況而定, 但是一定
要
有engine.h
4設置調用函數
不管誰(shuí)調用它, 都用 extern "C" { } 括起來(lái), 函數說(shuō)明也要,比如響應
菜單調用
我的函
數matlabPlot:
extern "C"{
int matlabPlot(HWND hwnd, double *data, int len); }
extern "C" {
void CMainFrame::OnSpeechDrawEnergy() {
matlabPlot(m_hWnd,energy,FRAMES); } }
5 設置其它編譯連接選項
INCLUDE 加上 c:\matlab\extern\include
加上 c:\matlab\extern\lib
加上 c:\matlab\bin
這樣就該編連通過(guò)了
****************************************************************************
***
vc++調用matlab5進(jìn)行計算
1、設置項目編譯選項
首先建立一個(gè)新的項目,或者打開(kāi)一個(gè)已有的項目,然后選擇菜單:
Project->Settings->C/C++
Category:Preprocessor
Preprocessor definitions:
添加: MSVC,
IBMPC,MSWIND
Category: Precompiled Headers
選擇: Automatic use of precompiled headers
Through header: stdafx.h
2、調設置項目連接選項
首先要從下面幾個(gè)函數定義文件(*.def)生成相應的導
入庫文件(*.lib)
libmmfile.def
libmcc.def
libmatlb.def
libmx.def
libmat.def
它們位于目錄c:\matlab\extern\include
用下面命令導出庫文件:
lib /def:libmmfile.def /out:libmmfile.lib /machine:ix86
lib /def:libmcc.def /out:libmcc.lib /machine:ix86
lib /def:libmatlb.def /out:libmatlb.lib /machine:ix86
lib /def:libmx.def /out:libmx.lib /machine:ix86
lib /def:libmat.def /out:libmat.lib /machine:ix86
將它們放入你的項目連接選項
Project->Settings->Link
Category:Input
Object/library modules:
添加:libmatpm.lib libmmfile.lib libmcc.lib libmatlb.lib libmx.lib libmat.lib
注1: 中間是空格,不要加逗號
注2: libmatpm.lib是C++ MathLib的庫,如果是只用C,就不用連接它了。
Ignore libraries:
添加: msvcrt.lib
3、設置編譯環(huán)境
Tools->Options->Directories
Include fiels添加:
c:\matlab\extern\include
c:\matlab\extern\include\cpp
Library fiels添加:
c:\matlab\extern\lib
c:\matlab\extern\include
注:下面這個(gè)目錄是那些lib所在的地方。
如果都挪到上面的目錄,這個(gè)
自然就不要了。
4、編寫(xiě)程序
用MCC命令生成的CPP文件和自己手工編寫(xiě)的CPP文件, 其項目設置是完全相同的,
程序的語(yǔ)法原則上也是一樣的. 只是MCC生成的CPP文件有大量"沒(méi)用"的代碼.
(1)添加自己編寫(xiě)的程序模塊
用下面文件頭:
#include "stdafx.h"
#include "matlab.hpp"
然后, 按照C++ MathLib文檔要求的格式書(shū)寫(xiě)程序.
(2)嵌入mcc生成的文件
在MATLAB下用下面格式的命令生成cpp文件
mcc -t -L Cpp test
得到test.hpp, test.cpp
將test.cpp加入項目, 不做任何改動(dòng).
最后,摁F7編譯就可以了。
5、實(shí)例
這里有個(gè)VC的project,用C++數學(xué)庫解決了一個(gè)幼兒園的算
術(shù)題,
下載回去看看吧,馬上就明白了。
MccDemo.zip (68K)
這里先說(shuō)明一下:
MATLAB程序test.m:
function [sum, prod =test(x,y)
sum = x+y;
prod = x*y;
用來(lái)計算兩個(gè)數的和與積。注意這是兩個(gè)返回變量的情況。
另外,x,y當然可以是數組。
用mcc命令生成了test.hpp和test.cpp。
文件demo.cpp:
#include "stdafx.h"
#include "matlab.hpp"
#include "test.hpp"
void mccDemo()
{ CString str;
mwArray x, y, sum, prod;
double dx,dy,dsum,dprod;
x = 5.0;
y = 10.0;
sum = test(&prod, x, y);
dx=x(1,1);
dy=y(1,1);
dsum=sum(1,1);
dprod=prod(1,1);
str.Format("%f+%f=%f\n%f*%f=%f", dx,dy,dsum,dx,dy,dprod);
AfxMessageBox(str);
}
由于采用了C++數學(xué)庫,語(yǔ)法很簡(jiǎn)單。注意數組的賦值、其中
數據的存取,這些都要仔細
地看手冊。
最后是跳出一個(gè)消息框,顯示計算結果。
改程序啟動(dòng)之后,選擇菜單mcc->demo即可。
*******************************************************************
【 在 hyson (千山暮雪) 的大作中提到: 】
∶
請問(wèn)如何用VC調用Matlab中的函數? --
※ 來(lái)源:·BBS 水木清華站 smth.org·[FROM: 166.111.53.12]