我用matcom将我需要的 用matlab编的绘图程序 转换成c++语言,然后将生成的.cpp源代码拷到我的MFC按钮响应函数下(同时将v4501v.lib和matlib.h 添加到工程里,工程文件下还有v4501v.dll文件):#include "matlib.h"UINT CFilterDlg::ShowgraphThread(void *param)
{
CFilterDlg *dlg=(CFilterDlg *) param;
dlg->GetParent();
dlg->ShowInfo("正在作图,请稍后...",0);    initM(MATCOM_VERSION);
//生成的cpp源码
    dMm(err);     
    #line 1 "c:/matcom45/ff.m"
   call_stack_begin;
    #line 1 "c:/matcom45/ff.m"     
    #line 3 "c:/matcom45/ff.m"
_   load(TM("SimulinkData.dat"),(CL(err))); 
    #line 4 "c:/matcom45/ff.m"
_   display(figure());
    #line 5 "c:/matcom45/ff.m"
_   display( subplot(2.0,4.0,1.0) );
    #line 5 "c:/matcom45/ff.m"
_   display( plot((CL(err(c_p,1.0)))) );
    #line 5 "c:/matcom45/ff.m"
_   display( title((CL(TM("角度")))) );
    #line 5 "c:/matcom45/ff.m"
_   display( xlabel((CL(TM("s")))) );
    #line 5 "c:/matcom45/ff.m"
_   display( ylabel((CL(TM("分")))) );
    #line 5 "c:/matcom45/ff.m"
_   display(grid()); 
    call_stack_end;     
 
   dlg->ShowInfo("作图完成",0);   exitM();
   return 0;  }
程序能运行正常,但是每次退出后发现任务管理器里还有进程,总是得手动清除,狂郁闷
求助高手!
谢谢!

解决方案 »

  1.   

    而且这种情况下,程序肯定能执行到得地方打断点单步运行发现断点无效。
    debug调试下退出程序后,但扔处在debug模式下,用break发现程序停在:
    7C92EB94   ret //这里
    7C92EB95   lea         esp,[esp]
    7C92EB9C   lea         esp,[esp]
    7C92EBA0   nop
    7C92EBA1   nop
    7C92EBA2   nop
    7C92EBA3   nop
    7C92EBA4   nop
    7C92EBA5   lea         edx,[esp+8]下面得Context内容显示:NTDLL!7c92eb94();此时若继续按一下F5,程序才退出debug模式。求助~感激加分!
      

  2.   

    我猜测是matlab的库不但需要显式的初始化,也需要显式的卸载,如果没有进行显式的卸载,那么当程序退出时,系统不能自动的卸载,所以不能退出。
    根据汇编来看,应该处于系统的自动清理过程中,不过这段汇编没有更详细的信息,因为全是nop和lea
      

  3.   

    确实,估计你启了mat的engine,你必须手动地关。
    这很正常
      

  4.   

    matcom以前毕业设计的时候用过
    碰到过楼主这样的情况
    后来不知道怎么又好了
      

  5.   

    我猜测是matlab的库不但需要显式的初始化,也需要显式的卸载,如果没有进行显式的卸载,那么当程序退出时,系统不能自动的卸载,所以不能退出。
    根据汇编来看,应该处于系统的自动清理过程中,不过这段汇编没有更详细的信息,因为全是nop和lea------------
    下面这些是debug单步模式下卡住后用break时调用call stack得到的内容:
    NTDLL! 7c92eb94()
    USER32! 77d195f9()
    USER32! 77d196a8()
    AGO4501! 26dc0f37()
    AGO4501! 26db8430()
    AGO4501! 26db81c5()
    AGO4501! 26db39c5()
    AGO4501! 26f009a1()
    AGO4501! 26d010b2()
    NTDLL! 7c943f31()
    KERNEL32! 7c81cd76()
    KERNEL32! 7c81cdee()
    doexit(int 0, int 0, int 0) line 392
    exit(int 0) line 279 + 13 bytes
    WinMainCRTStartup() line 345
    KERNEL32! 7c816fd7()
    不知道这些信息可行?谢谢!确实,估计你启了mat的engine,你必须手动地关。
    这很正常
    ---------
    请问该怎么手动关呢?谢谢!谢谢以上回复的各位!
      

  6.   

    请问该怎么退出呢?
    谢谢!
    要在Oncancel或destroy里添加什么吗?
    我用Postquitmessage不行
      

  7.   

    程序调用的库还没有退出。
    ---
    请问该怎么退出呢?谢谢了!网上有人说加  winaxes(m_hWnd) 这句话就可以了,但是我加了后程序反而不能运行了,有错误产生。希望能得到各位老手高手们进一步的帮助,谢谢!
      

  8.   

    同问
    我也出现了这个问题,加入matcom编译后的一些文件后,就出现楼主的问题。怎么解决呀?如何结束mat 的线程?