Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
![]() |
#1 |
初级会员
注册日期: 2008-08-30
年龄: 45
帖子: 4
声望力: 0 ![]() |
![]()
问题如下:
我的VC程序已经可以调试Matlab生成的COM了,但由于算法要反复多次调用组件的 接口函数,当调用多次之后,函数的返回就不对了,也就是说 HRESULT hr 的值为 负数,开始的时候返回值都为0。 经过调试之后,发现可能是内存泄漏问题,原因如下: (1)被调用的接口函数涉及到一个大的矩阵,约有2500×2500,当把这个值减小到 1000×1000时,发现可以正确执行的次数增加,由30次到100次以上; (2)调用Matlab 生成的COM之后,发现存在2700多个内存泄漏(用Boundschecker 内存泄漏检测软件发现的,容量达1,116,982,876之多)。即使仅仅创建COM对 象之后,马上删除,都有15M左右的内存泄漏。用Boundschecker检查后发现,内存 泄漏所发生的地方几乎都是Matlab本身所带的动态库,比如awt.dll等(详见附件) (3)调用Matlab 生成的COM之后,感觉机器的速度明显变慢; 我在Matlab中,用feature(“statistics”)检查内存的使用情况,并记录到文 件,并没有发现明显的内存减少情况。那么,到底是不是内存的问题呢?我不能确 定,如果是的话,那么用Matlab产生COM的时候,又如何控制呢? 错误的时候,hr 的返回值为0x8000,4005。::FormatMessage之后得到的错误信息 为:“Unsepecified error”. 有哪位大侠知道原因?谢谢执教! |
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2008-08-30
年龄: 45
帖子: 4
声望力: 0 ![]() |
![]()
会不会是Matlab内存本身的管理问题?还是用 Matlab 创建 COM 有什么特殊要设置的地方?
我在Matlab程序中分配了一个大的矩阵(约2500×2500),问题就在这里。当没有这个大矩阵的时候,程序就可以被调用很多次。 各位大侠,可以做个简单的实验看看:在Matlab程序中只要加入 a=ones(2500)等类似的分配。那么,只要用COM方式反复调用这个Matlab函数,检查调用该函数的HRESULT结果,就会发现这个问题。各机器的环境可能会有不一样,我觉得只要分配的矩阵足够大,这个错误就会发生。 我的Matlab是2007a,VC6.0和.NET 2003 都用过,全是这样的结果。 如果这样的问题不解决,那根本无法安全的用Matlab写算法来被VC调用了。 各位大侠,帮忙查查原因啊! |
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2008-09-07
年龄: 45
帖子: 1
声望力: 0 ![]() |
![]()
楼主,2007a 如何生成Com组件,找不到comtool
|
![]() |
![]() |
![]() |
#4 |
初级会员
注册日期: 2008-08-30
年龄: 45
帖子: 4
声望力: 0 ![]() |
![]()
dotnettool
或者 deploytool |
![]() |
![]() |
![]() |
#5 |
普通会员
注册日期: 2008-09-22
年龄: 24
帖子: 30
声望力: 17 ![]() |
![]()
楼主也在用MATLAB生成COM与VC 混合编程啊,我现在也在做这个,我的QQ 是410714622,能跟你讨论一下吗?
|
![]() |
![]() |
![]() |
|
|
![]() |
||||
主题 | 主题作者 | 版面 | 回复 | 最后发表 |
[求助]两个图像如何相乘? | Jael | MATLAB论坛 | 4 | 2013-09-22 15:10 |
[原创]哥德巴赫猜想-张俊龙请白文章教授出示结果 | 龙舞山威 | 数学 | 0 | 2009-02-06 14:36 |
[求助]快考试了,不懂混合编程语言 | zjpqddx | MATLAB论坛 | 0 | 2008-12-25 21:52 |
[求助]一个有关用设计的滤波器处理声音信号的问题。 | fujinhai | MATLAB论坛 | 7 | 2008-11-13 09:31 |
[求助]在SIMULINK里,如何将inegrator上方的箭头移到下面去 | yijianmei | MATLAB论坛 | 1 | 2008-07-24 10:15 |