关于MATLAB7.0与vc++6.0通过com接口实现混合编程

来源:互联网 发布:2016年进出口贸易数据 编辑:程序博客网 时间:2024/06/05 20:28

     我最近在研究VC++ 6.0和MATLAB7.0两种编译工具的混合编程,也在网上查询了好多关于这方面的知识。其中利用com接口实现两者的混编相对比较简单,下面我给大家演示一个实例:

      编译环境  win7 + MATLAB7.0 + vc++ 6.0。

     (1).在matlab7.0里面运行  mbuild -setup  结果如下图:            

           

           输入y,结果如下图:

          

           选择Microsoft Visual C/C++ version 6.0,即输入2,结果如下图:

          

           接下来是确认路径,输入y,结果如下图:

          

          到此就完成了mex -setup语句的操作。

           (2).在matlab7.0里面运行  mbuild -setup  结果如下图:

          

          因为运行步骤和(1)里面的一模一样,我就在这里给大家截图了,如下:

         

          错误1:大家有的电脑可能在运行 mex -setup 或者 mbuild -setup 时在选择选项时没有vc++ 6.0这个选项,根据小编的经验,主要是路径的问题,只需要将vc++ 6.0安装在C盘就可以在matlab里面获取到路径了。

         (3).编译函数:在matlab里面写一个 **.m 文件,如下图:

         

         接着编写函数代码:

         function y = test(temp)
         x=0:1:100;
         y=poisspdf(x,temp);
         plot(y);

         命名为 test ,编译保存。如下图:

        

         然后利用mcc语句生成dll文件,操作语句为:

          mcc -W cpplib:testlib -T link:lib test

          其中testlib是你要生成dll的文件名,test是你 **.m函数的文件名。

          结果如下图:

         

         这样就在我们matlab的文件目录里生成了相应了一大堆文件,而我们需要的就是 .ctf  .dll  .h  .lib   4个文件。

         如下图:

        

          做到这里就已经完成了matlab这边的操作。现在我们转去vc那边啦~~

          (4).用vc++ 6.0建立一个工程,无论是mfc还是Win32控制台程序都行,小编就在这里建立一个mfc对话框程序吧。过程就不说了,顺便再为对话框添加一个按钮相应函数,如下图:

         

          (5).将(3)里面生成的4个文件复制到我们建立的工程目录下,我建立的目录名为test11,如下图:

         

 

          (6).与matlab路径的互连操作:

          a.设置Include 和Library 目录:

          选择Tools->Options->Directories,

         在Show directoris for:中选择Include files,

          添加<Matlab安装路径>\extern\include 目录。如下图:

         

               在Show directoris for:中选择Library files,

          添加<Matlab安装路径>\extern\lib\win32\microsof\msvc60.  如下图:

         

         b.在FileView的Header Files里面加入testlib.h文件,如下图:

          

             

            

         

        c.进入project>Settings,  选择“link”选项卡,Category选择General,在下面的Object/library modules 那栏的最后添加:

         testlib.lib mclmcrrt.lib
 

 

        (7).添加编译代码:

        首先在Dlg.cpp文件里面添加头文件 #include "testlib.h"

        因为建立的工程是对话框文件,所以在Matlab_test按钮的消息相应函数里添加如下代码:

        if( !mclInitializeApplication(NULL,0) )
       {
               AfxMessageBox("Could not initialize the application!" ); 
       }
 
       // initialize lib
       if( !testlibInitialize())
       {
              AfxMessageBox("Could not initialize testlib!");
       }
       mwArray a(1, 1, mxDOUBLE_CLASS);
       mwArray b(1, 1, mxDOUBLE_CLASS);
       double *x, y = 10;
       x = &y;
       a.SetData(x, 1);
       test(1, b, a);
       testlibTerminate();
       mclTerminateApplication();

       如下图:

      

       之后运行程序:点击Matlab_test按钮,运行结果如下:

      

         OK~~  就这样,打完手工~~~ 欢迎转载哦~

0 0