lengqi 发表于 2010-8-2 21:27:53

mfc 调用matalab的dll进行画图时,出不来图形

[我用mfc 调用matalab的dll进行画图时,出不来图形。请问是怎么回事啊

我的环境是vs 2005 matalab7.5
huatu.m函数如下:
function y= huatu(x)
y = sin(x)
plot(x,y);
end


MFC处理主要函数如下:

void CmyaddmfcDlg::OnBnClickedButton1()
{
      // TODO: 在此添加控件通知处理程序代码

                if( !mclInitializeApplication(NULL,0) )

      {
      AfxMessageBox(_T("Could not initialize the application!"));
                return ;
      }

      if( !libhuatuInitialize())

      {
      AfxMessageBox(_T("Could not initialize libmyadd2!"));
                return ;
      }

mwArray a(1, 10,mxDOUBLE_CLASS);
      double *aData;
      aData = new double;
      for(int i=0; i<10; ++i)
      {
                aData = 1.0*i;
      }
      a.SetData(aData, 10);
      mwArray b(1, 10,mxDOUBLE_CLASS);
      huatu(1,b,a);
      libhuatuTerminate();
      mclTerminateApplication();
}


我的环境变量设置等 应该没有问题。因为我执行win32控制台程序是成功的。就是mfc画图总是不成功!!
求帮助!执行的时候,貌似有一个窗口闪过,然后就没了。然后重新执行,就会出现初始化错误提示!

lengqi 发表于 2010-8-3 14:43:50

咋没有人看一眼呢:'(

taohe 发表于 2010-8-3 15:21:52

这个问题似乎已经讨论过若干次了,不妨再来一次。

从给出的程序来看,以及lz看到貌似有个窗口一闪而过,那时因为程序在执行过程中的确画出图了,可是关掉的太快了(通过调用libhuatuTerminate())。

解决的办法就是把对我们的DLL库的初始化和关闭分别放到程序别的地方,不要放到按钮响应函数里,通常可以吧初始化代码放到OnInitialDialog或者其他合适的地方,而把关闭库的代码放到OnClose或者其他合适的地方,这样按钮的响应函数只做画图,这样也显得有点条理。

lengqi 发表于 2010-8-4 16:07:48

谢谢!已经解决了

我的确看到有讨论过这类问题的,不过还是您的这个回复,让我豁然开朗,谢谢!!!

yejihai669 发表于 2010-10-27 10:34:34

嗯,就是这样子~~
页: [1]
查看完整版本: mfc 调用matalab的dll进行画图时,出不来图形