正文

VB与MATLAB通信实现方案二:COM 组件2007-07-20 22:53:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/emath/27672.html

分享到:



            VBMATLAB通信实现方案二

 

前言:MATLABVB接口,有使用DLL, DDE ,OLE ,ActiveX ,COM 组件等多种方法.

本文介绍的方法:

        使用MATLAB中的COM生成器(comtool),将M文件生成DLL,于VB中引用.从MATLAB6.5开始,MATLAB提供了COM生成器,使用该生成器,可以将MATLAB函数和自定义的函数打包成组件,然后集成到支持该技术的应用程序中去.使用该技术,可以很大程度上脱离MATLAB环境.

 

做个简单的例子吧!

 1.建立M文件Test.M
function s=test()
 global a b      %值得注意的地方
 s=a+b;
 return
(Matlab6.5)中测试:
>> clear
>> global a b
>> a=1;b=2;
>> test

ans =

     3


2.使用Matlab 之comtool将其编译为testdll.dll包含类名为 testdll

>>comtool

MATLAB COM Builder-->File-->New...

注意写类名:class name

添加要编译的M文件: 点击Add File

编译DLL:点击Build

 

Matlab 中测试DLL:

>> h=actxserver('testdll.testdll')


3.建立VB工程,工程-->引用-->浏览,找到testdll.dll并添加
程序代码:
Option Explicit

Dim mydll As New testdll.testdll

Dim bval As Double

Dim aval As Double

 

Private Sub Form_Load()

Set mydll = New TestDll.TestDll
End Sub

 

Private Sub Command1_Click()

Dim varRes As Variant      '要注意的地方

aval = 3

bval = 2

mydll.a = aval

mydll.b = bval

Call mydll.test(1, varRes)

Text1.Text = Str(varRes)

End Sub

 

补充说明:

1.M文件的形式值得注意;

2.编译时要求有VC或其他C/C++编译环境;

3.引用DLL要注意一些问题;

4.VB中取返回值:

  Dim varRes As Variant    

  Call mydll.test(1, varRes)

  Text1.Text = Str(varRes)

 5.本文例子较简单,意在说明问题,复杂的留给读者发挥吧!

     该方法可以使程序很大程度上脱离MATLAB环境运行!

     编译DLL还有其他方法,但用到的原理是一样的,不妨一试试!

    有问题联系!

Edited by Guassfans 2007-07-20

阅读(6310) | 评论(6)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

评论人:jiam 发布时间: 2010-04-17 09:04:00
我的邮箱是bigblueman@163.com谢谢
评论人: 发布时间: 2010-04-17 09:03:00
运行后点 command1 就显示
run-time error '-2147467259(80004005)‘:
Error using==>plus
Matrix dmensions must agree.
call mydll.sincos(1,varRes) 这句写错了
为什么?
评论人:jiam 发布时间: 2010-04-17 09:02:00
private sub form_load()
 set mydll=new cossin.cossindll
end sub
评论人:jiam 发布时间: 2010-04-17 09:01:00
private sub command1_click()
  dim varRes as variant
  aval=text1.text
  bval=text2.text
  mydll.s=aval
  mydll.c=bval
  call mydll.sincos(1,varRes)
  picture1.picture=loadpicture("c:\matlab7\work\jsincospic.jpg")
end sub
评论人:jiam 发布时间: 2010-04-17 09:00:00
option explicit
dim mydll as NEW cossin.cossindll
dim aval as string
dim bval as string
评论人:jiam 发布时间: 2010-04-17 08:58:00
你好.看了你的列子我自己写了段程序。请看看有什么问题

M文件:function ss=sincos()
       global s c
      x=0:pi/10:2*pi
     y1=sin(x+s)
    y2=cos(x+c)
   plot(x,y1,x,y2)
   print -djpeg -r85 jsincospic
   return
用  comtool build以后在VB中写代码:
您需要登录后才能评论,请 登录 或者 注册