我将matlab程序生成动态链接库,使其可以在VC++中调用。在对话框程序中一调用fwriet和fread函数写、读二进制文件,然后再调用matlab函数时就会出现:“0x7c812afb 处未处理的异常: Microsoft C++ 异常: 内存位置 0x0013c7cc 处的 mwException”,不调用fwriet和fread,只运行matlab程序时没有问题。

解决方案 »

  1.   


    只调用fwriet和fread有问题么?
      

  2.   

    回复2楼:
        只调用fwriet和fread都可以,就是不能调用完fwriet或fread再调用matlab程序。
      

  3.   

    这是因为只调用fwriet和fread后 你已经破坏了栈,再调用matlab,此时指令指针指向一个未知地址 就崩了
      

  4.   

    0x0013c7cc 这个应该不位于你程序中的任何区段. 调试器 运行程序,崩后 中断下来看调用堆栈,栈被破坏厉害了 自己用WinDbg 慢慢调
      

  5.   

    现在又出现了这样的问题,我首先用matlab程序实现作图并将图形放入剪贴板,将该程序编译成动态链接库在vc调用,通过vc程序将剪贴板上的图形取出并在对话框的静态文本控件中显示,最后添加一个“保存”按钮实现图片的保存(保存为bmp文件),现在出现的问题就是我保存完一个图形以后,再在vc中调用其他的matlab计算程序就会出现“ 0x7c812afb 处未处理的异常:Microsoft C++ 异常: 内存位置 0x0013c7cc 处的 mwException”这样的错误,如果继续运行就提示“0x0481b376 处未处理的异常: 0xC0000005: 读取位置 x00000000 时发生访问冲突”;如果调用的是matlab作图程序,虽然不会报错但是感觉程序没有运行或者运行错误,因为弹出的对话框中的静态文本控件是空的(我在“保存”的消息响应代码中最后清除了剪贴板数据),也就是说这时的剪贴板上没有图形。但是,如果我只是打开对话框仅显示图形的话,再运行其他的matlab程序都是没有问题的。说了这么多,也不知道说明白没有。总之,就是只要我一保存图片,vc程序中所有的matlab程序都运行不了了。请各位高手帮帮忙,万分感谢!
      

  6.   

    我碰到类似问题,说下解决思路吧先确定了错误是在调用matlab的dll函数产生的,调试后报mwException错误,之后感觉很奇怪try
    {
    emdcal(1,imf,data);//这是我dll里的函数
    }
    catch (const mwException& erro)
    {
    CString str;
    str = erro.what();
    MessageBox(str,NULL,NULL);
    }
    然后再运行弹出错误提示Undefined function or method 'emdcal' for input arguments of type 'double'.
    百度后说在matlab分类里找到类似问题说是路径的问题,采用m文件编辑器的set path解决。但我是混合编程不可能原样照搬,matlab导出的除了lib,dll,h这三个文件外,就只有ctf文件可能有关了(mcc的时候用-C参数生成),ctf文件记得在北航那本matlab和vs混合编程上说是所有m源文件和数据打包AES加密放在里面,于是我把ctf文件拷贝到vs目录下再运行就正常了。希望能够给碰到相似问题的一些参考。