- 积分
- 149
- 注册时间
- 2003-5-22
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2007-8-10 15:53:07
|
显示全部楼层
来自 新加坡
写的不错,看起来都是自己的实践经验。谢谢!
不过我不懂VB,看完楼主的帖子后,有一些疑问,希望能给以解答。
原帖由 urright 于 2007-8-8 12:30 发表
...
2、vb调用matlab编译的组件格式问题
这个问题坛子里面已经讨论过,但发现仍然有不少人搞不清楚,其实这个格式非常简单,
call myDLLName(n,OutVar,InVar1,InVar2,...)
其中n是输出变量的数目,如果是一个变量,就取1,依此类推。OutVar是输出变量(或返回参数值),在vb下通常声明为Variant类型,InVar1,InVar2是输入变量,有几个就写几个,其类型可根据matlab中相应参数进行定义,也可定义为Variant类型。...
请问在有多个输出变量(比如两个或者更多)时,那个myDLLName函数中仍然只是一个OutVar吗?我以前也是这样认为的,不过最近我自己测试后发现,m方程有几个输出变量,那里就响应的有几个变量。比如我们用下面这个例子为例:
- function [y,z] = myadd2(a, b)
- % dummy function, just to demonstrate the idea
- y = a+b;
- z = a+2*b;
- end
复制代码
在matlab中创建一个project,编译生成COM组件,观看产生的代码,我们将发现,所产生的COM组件所导出的函数接口定义为:
- Imyadd2class : IDispatch
- {
- //
- // Raw methods provided by interface
- //
- virtual HRESULT __stdcall get_MWFlags (
- /*[out,retval]*/ struct IMWFlags * * ppvFlags ) = 0;
- virtual HRESULT __stdcall put_MWFlags (
- /*[in]*/ struct IMWFlags * ppvFlags ) = 0;
- [color=red]virtual HRESULT __stdcall myadd2 (
- /*[in]*/ long nargout,
- /*[in,out]*/ VARIANT * y,
- /*[in,out]*/ VARIANT * z,
- /*[in]*/ VARIANT a,
- /*[in]*/ VARIANT b ) = 0;[/color]
- virtual HRESULT __stdcall MCRWaitForFigures ( ) = 0;
- };
复制代码
原帖由 urright 于 2007-8-8 12:30 发表
...
4、绘图的问题
在我的m文件中使用了plot来绘制寻优的过程,图形绘制好了以后,使用了text函数在图上面显示优化的结果信息,代码为:
text(text_x,text_y,text_str,'fontsize',20);
在vb下第一次绘图不会出错(连续绘制几十张图),然后vb程序不关闭,另外计算一次,再来点绘图就会出错,调试错误代码就是上面这一行,始终找不到原因,后来将这行注释掉以后,问题消失了。但为了显示这个信息在图片上,我又不得不另外想办法把信息传到vb下,用vb代码来实现该信息的显示。
此错误信息为:
...
感觉很有可能是VB程序的错误,而不是编译后程序的问题。另外关于figure(i)在编译后的问题,需要看程序后才能分析。如果只是希望达到动态隐藏、显示某些figure窗口,应该没有问题。这个我在学习混编时做过。
其实混编并不难,也不烦。看着matlab的在线帮助基本上就能搞定大多数问题。不过,好像现在很少有人会“闲”的没事干去看matlab的在线帮助的(不针对任何人,只是有感而发) |
评分
-
2
查看全部评分
-
|