登录论坛

查看完整版本 : [求助] 不能多次调用Matlab生成的COM接口函数,奇怪!


HustJames
2008-08-30, 20:31
问题如下:
我的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”.

有哪位大侠知道原因?谢谢执教!

HustJames
2008-09-04, 21:29
会不会是Matlab内存本身的管理问题?还是用 Matlab 创建 COM 有什么特殊要设置的地方?

我在Matlab程序中分配了一个大的矩阵(约2500×2500),问题就在这里。当没有这个大矩阵的时候,程序就可以被调用很多次。

各位大侠,可以做个简单的实验看看:在Matlab程序中只要加入 a=ones(2500)等类似的分配。那么,只要用COM方式反复调用这个Matlab函数,检查调用该函数的HRESULT结果,就会发现这个问题。各机器的环境可能会有不一样,我觉得只要分配的矩阵足够大,这个错误就会发生。

我的Matlab是2007a,VC6.0和.NET 2003 都用过,全是这样的结果。

如果这样的问题不解决,那根本无法安全的用Matlab写算法来被VC调用了。

各位大侠,帮忙查查原因啊!

yqcxm
2008-09-10, 19:21
楼主,2007a 如何生成Com组件,找不到comtool

HustJames
2008-09-12, 17:38
dotnettool
或者
deploytool

TT
2008-12-02, 15:12
楼主也在用MATLAB生成COM与VC 混合编程啊,我现在也在做这个,我的QQ 是410714622,能跟你讨论一下吗?