找回密码
 注册
Simdroid-非首页
查看: 159|回复: 5

vc调用matlab生成图片却只是一闪而过!(附源程序)已解决

[复制链接]
发表于 2009-10-14 16:04:19 | 显示全部楼层 |阅读模式 来自 重庆沙坪坝区
本帖最后由 tiantian0 于 2009-10-14 21:39 编辑

vc调用matlab生成图片却只是一闪而过!(附源程序)m文件如下:利用mcc命令生成动态链接库文件,添加入MFC对话框按钮代码中,
function [y,z] = myadd2(a, b)
y = a+b;
z = a+2*b;
x=0.1:0.01:2*pi;
t=sin(x);
plot(x,t)
hold
end

vc(MFC)代码如下:
void CTestmyadd2_r2007bDlg::OnButton()
{    /**//* Initialize the MCR */
      /* if( !mclInitializeApplication(NULL,0) )
        {  MessageBox( "Ó¦ÓÃÎÞ·¨³õʼ»¯£¬Çë²éÕÒÔ Òò£¡" );}
        // initialize lib
        if( !)
        { MessageBox( "ÎÞ·¨½øÐгÌÐòµÄµ÷Óã¬Çë²éÕÒÔ Òò!" );}      */

        libmyadd2Initialize();
        try
        {
        // declare and initialize a
        mwArray a(2, 2,  mxDOUBLE_CLASS);
        double *aData;
        aData = new double[4];
        int i;
        for( i=0; i<4; ++i)
        {
                aData = 1.0*i;
        }
        a.SetData(aData, 4);
        // declare and initialize b
        mwArray b(2, 2,  mxDOUBLE_CLASS);
        b(1,1) = 11.;
        b(1,2) = 12.;
        b(2,1) = 21.;
        b(2,2) = 22.;
        mwArray y(2, 2,  mxDOUBLE_CLASS);
        mwArray z(2, 2,  mxDOUBLE_CLASS);

        // call the function
                myadd2(2, y, z, a, b);
        // allocate outputs
        double *yData, *zData;
        yData = new double[4];
        if( yData == NULL )
        {
                MessageBox( "Failed to allocate memory for yData!" );
               
        }
        zData = new double[4];
        if( zData == NULL )
        {
               MessageBox( "Failed to allocate memory for zData!" );
               
        }
        // copy data from mwArray to C++
        y.GetData(yData, 4);
        z.GetData(zData, 4);
        // print output
     double n,m;
  n=y(1,1);
        m=z(1,2);      
        SetDlgItemInt(IDC_EDIT1,n);
        SetDlgItemInt(IDC_EDIT2,m);        
        UpdateData(FALSE);
        // deallocate memory
        delete [] aData;
        delete [] zData;
        delete [] yData;
        }
        catch( const mwException& e)
        {
          MessageBox("eror!");
                  
        }
        // terminate the lib
        libmyadd2Terminate();

        // terminate MCR
        mclTerminateApplication();

}

结果是程序运行慢,并且图片一闪而过,再次点击按钮,则显示无法初始化!

请问这是什么问题,如何解决?
 楼主| 发表于 2009-10-14 16:06:15 | 显示全部楼层 来自 重庆沙坪坝区
Simdroid开发平台
版本:matlab2007b   、 vc++6.0;
回复 不支持

使用道具 举报

发表于 2009-10-14 16:41:44 | 显示全部楼层 来自 广西贵港

allocate outputs

delete [] yData;
        }
这个}之间的全部注释掉
另外,将Initialize the MCR放在CVIEW等等的初始化中
mclTerminateApplication放在CVIEW等等的退出中
回复 不支持

使用道具 举报

发表于 2009-10-14 16:43:22 | 显示全部楼层 来自 广西贵港
另外,myadd2(2, y, z, a, b);这里的y,z是否应该为&y,&z?

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2009-10-14 20:22:54 | 显示全部楼层 来自 新加坡
另外,myadd2(2, y, z, a, b);这里的y,z是否应该为&y,&z?
shunfly 发表于 2009-10-14 16:43


楼主这里用的生成代码的C++接口函数,所以有关mwArray的参数都是其引用。

To:楼主,

你把关于libmyadd2的初始化、调用、以及清除都放在同一个按钮事件的相应函数中,其结果就是执行后图片一闪而过。为了让图片留住,我们应该充分利用基于事件触发的图形界面程序的好处,让不同的事件激发不同的函数。具体可以参考shunfly在上上一贴中给出的关于处理初始化和清理的建议。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-10-14 21:23:19 | 显示全部楼层 来自 重庆沙坪坝区
谢谢,确实是初始化及终止的代码放错地方了。

评分

1

查看全部评分

回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-28 07:20 , Processed in 0.056198 second(s), 19 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表