VB与MATLAB混合编程探讨
2 应用举例
在VB中利用随机数生成16个10以内的整数,作为一个信号序列,利用MATLAB的快速傅立叶变换函数(FFT())对序列进行变换,再将变换结果传递回VB,并显示在窗体上。
在MATLAB中编辑好M文件(test.m),实现读取序列文件及FFT并写回序列文件,调试成功。代码如下:
function t
fid=fopen't.txt''rt+' %以读写文本方式打开
文件
acount=fscanffid'%d' %文件以整数格式读入
矩阵a
m=fftacount %FFT运算
frewindfid %文件指针指向文件头
fprintffid'%f\n'm %向文件写入矩阵m
fclosefid
按照前述步骤在VC++中转换为test.c文件,找到接口函数,本例为mlfTest()。
void mlfTest(void){
mlfEnterNewContext(0,0);
Mtest();
mlfRestorePreviousContext(0,0);
}
编译生成test.dll文件。
在VB中生成随机序列并写入文件:
Private Sub Command1_Click()
Randomize
Dim i As Integer
Dim a As Integer
Dim b As String
Text1.Text = ″″
Open App.Path & ″\t.txt ″ For Output As #1
For i = 1 To 16
a = Int(10 * Rnd)
Print #1, LTrim(a)
b = b & Str(a) & Chr(13) & Chr(10)
Next i
Text1.Text = b
Close #1
End Sub
声明mlfTest()函数:
Private Declare Sub mlfTest Lib ″G\test\dll\dll.dll″
调用该函数的事件代码:
Private Sub Command2_Click()
MlfTest '调用函数
End Sub
本例中未向函数传递参数,也无需函数返回运算结果,故采用调用子程序过程(Sub)方式直接调用。结果由VB读取文件获得:
Private Sub Command3_Click()
Dim str1 As String
Dim str2 As String
Text2.Text = ″″
Open App.Path & ″\t.txt″ For Input As #1
Do While Not EOF1
Line Input #1 str1
str2 = str2 & str1 & Chr(13) & Chr(10)
Loop
Text2.Text = str2
Close #1
End Sub
本例在Windows XP、VB6.0、VC++6.0、MATLAB6.5下调试通过。VB与MATLAB的混合编程,可以脱离MATLAB环境运行,有利于程序发布及使用。通过二者结合,减少了设计算法的时间,降低了编程难度,同时兼顾了代码安全和界面友好。程序界面如图2所示。