VBMatlab传递数据
lb107
VBMatlab传递数据
请问:
    我想将m函数文件编译成dll文件,在VB里面输入数据然后调用这个dll进行计算,这样能够实现吗?
    有兄弟有相关的例子没?网上VC调用Matlab的例子挺多的,但没有VB调用Matlab的例子。
谢谢指点。
2006-3-5 20:19 taohe
Re:VBMatlab传递数据
VB调用DLL会不会很复杂?总感觉VB属于高级编程语言,在调用DLL方面不会比VCvb编程论坛更难才对。根据网上你发现的VC调用MATLAB产生的DLL的例子,大概了解MATLAB产生的DLL,然后在VB中调用,貌似应该顺理成章。
使用VB的话,一个好的方案可能是使用MATLAB产生的COM组件,而不是普通的DLL。在VB中可以很方便地使用这些COM组件。MATLAB的在线帮助有较详细的例子,不妨看看。
2006-3-5 23:01 bainhome
Re:VBMatlab传递数据
前一段儿看了看书,做过两个简单的,下面这个是其中之一(曾发在别的论坛上,转一下),因最近实在是太忙,没有时间研究,所以比较基础,没有更加复杂的Trick比如将VBtext中的数组作为COMinput、图形绘制等等,VB代码:
[code] Private addn As addn.Add
Private Sub Command1_Click()
Dim x As Double
Dim y As Variant
x = CDbl(Text1.Text)
Call addn.numadd(1, y, x)
Text2.Text = y
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
Set addn = New addn.Add
Form1.Caption = "VB调用MATLAB示例"
Text1.Text = 2
End Sub
[/code]
[code] function y=numadd(x)
y=2*x; [/code]
COM组件调用格式:
[code]call h.func(numout,arg1,arg2,...)[/code]
MATLAB中的函数书写格式:
[code][out1,out2,out3]=myfunc(arg1,arg2)[/code]
VB的调用应该为:
[code]func(3,out1inVB,out2inVB,out3inVB,arg1inVB,arg2inVB)[/code]
“3”指的是输出变量的数目
另外当多个版本的MATLAB在同一PC上时,VB只认其中一个版本产生的COM,不知道是不是环境变量设置的问题。
2006-3-6 09:41 lb107
Re:VBMatlab传递数据
谢谢楼上二位的指点!!
我的想法也是利用comtool直接将m文件编译成COM组件,然后在VB中调用
实现应该是没有问题,但是在交换数据方面肯呢感有点难度,我只想几个具体的例子看看其调用的根据体过程
谢谢!!
2006-3-6 19:53 taohe
Re:VBMatlab传递数据
[quote][b]lb107 wrote:[/b]
谢谢楼上二位的指点!!
我的想法也是利用comtool直接将m文件编译成COM组件,然后在VB中调用
实现应该是没有问题,但是在交换数据方面肯呢感有点难度,我只想几个具体的例子看看其调用的根据体过程
谢谢!!
[/quote]
如果用comtool也就是使用COM组件的话,事情就更好办了。因为进入COM世界后,所有的数据都是VARIANT,而VBCOM是非常亲近的关系,在VB中使用COM比起其他语言比
C++来说显得更为轻松。还得重复一下,matlab的在线帮助上关于COM组件的应用几乎全部是VB作为应用程序例子,不妨看看。
2006-3-6 20:05 lb107
Re:VBMatlab传递数据
我的英语不太好
taohe 老师能给一个具体的链接地址吗??
谢谢
2006-3-6 20:46 taohe
Re:VBMatlab传递数据
你指什么连接地址?我刚才说的在线帮助是matlab安装文档。
本来matlab的公司MathWorks的网站上有每次最新版的matlab的帮助文档连接。不过现在
MathWorks网站上的连接好像已经变成新版matlab R2006a的文档了。所以只好看matlab安装后的在线帮助了。
matlab不知你用那个版本的matlab,不管那个版本,在matlab环境中运行doc,然后在出来的帮助文档中寻相关的话题。如果是matlab6.5.x的话,应该在matlab com builder,如果是matlab7.x的话应该是matlab builder for com
里面有例子程序,如果VB好的话,应该没有问题的。别怕英文。
可惜我是VB盲,无法给出具体的帮助。
Good luck!
2006-3-6 22:40 lb107
Re:VBMatlab传递数据
再次谢谢
2006-3-12 21:35 godzilla2000cn
Re:VBMatlab传递数据
如果matlab中生成的图片怎么传到VB里,也就是在VB中用什么控件来接收matlabfig???
2006-11-1 19:46 tian7tian
大家好啊!
我现在是将m文件组成com组件,还没搞定呢,总出现错误!
2006-11-8 19:46 jimin
看了bainhome版主的一个例子后,做了个vb调用matlab时隐藏matlab figure的例子
Private Sub Command1_Click()
Dim objMATLAB As Object
Set objMATLAB = CreateObject("matlab.application")
Dim strEnter As String
Dim strCommand As String
strEnter = Chr(13) & Chr(10)
strCommand = "figure('visible', 'off', 'Units','points','PaperUnits', 'points');"
strCommand = strCommand & strEnter
strCommand = strCommand & "surf(peaks(25));"
strCommand = strCommand & strEnter
strCommand = strCommand & "print -dmeta"
strCommand = strCommand & strEnter
strCommand = strCommand & "close(gcf)"
strCommand = strCommand & strEnter
ute (strCommand)
imgDraw.Picture = Clipboard.GetData()
imgDraw.Refresh
Set objMATLAB = Nothing
End Sub
2006-11-12 10:42 WaitingForMe
Matlab的代码或者窗口, combuilder编译以后, 可以直接在VB里面引用. 如果需要移植到其他计算机上, 需要在目标计算机上安装一个虚拟机, 大概8M大小.
2006-11-12 13:59 bainhome
[quote]Matlab的代码或者窗口, combuilder编译以后, 可以直接在VB里面引用. 如果需要移植到其他计算机上, 需要在目标计算机上安装一个虚拟机, 大概8M大小.[/quote]
前一句话已经基本实现,后一句话不太明白...什么虚拟机?还是java虚拟机吗(自己感觉不像)?请教一下^_^
2006-11-29 19:23 tian7tian
关于bainhome写的程序,我问个问题,关于
function y=numaddx
其中y定义为variantx定义为double类型;是不是类型是固定的呢?
x可以定义为string类型么?
2006-12-11 14:43 tian7tian
有哪位了解的话,有时间的话,给答复一下,谢谢了!!
2006-12-31 01:24 WaitingForMe
[quote]原帖由 [i]bainhome[/i] 2006-11-12 13:59 发表
前一句话已经基本实现,后一句话不太明白...什么虚拟机?还是java虚拟机吗(自己感觉不像)?请教一下^_^ [/quote]
Combuilder创建的程序,移植到没有安装Matlab的电脑上的时候,需要安装一个什么包,都忘了,这个是Matlab的帮助,自己看帮助吧
MATLAB COM Builder: Overview: Packaging and Distributing the Component
2007-7-20 15:53 shiwenyaboa
VB调用matlab我现在也在用,很简单,只需要matlabm 文件是函数式的。然后在VB里添加一些程序,下面是我的一个小例子,希望有所帮助:
首先要声明:
Dim matlab As Object
Dim mimag() As Double
Dim y11(1 To 1) As Double
Dim a11(1 To 1) As Double
Dim a22(1 To 1) As Double
Dim b11(1 To 1) As Double
Dim b22(1 To 1) As Double
Dim c11(1 To 1) As Double
Dim c22(1 To 1) As Double
Dim d11(1 To 1) As Double

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。