乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      VC6.0調(diào)用MATLAB生成的COM組件(dll方式:簡(jiǎn)單加法)

       LSS133LSS 2014-06-10
      http://www./thread-10041-1-1.html
       
      http://www./thread-545-1-1.html
      一、
      matlab下m文件
      function [y,z] = myadd2(a, b)
      % dummy function, just to demonstrate the idea
      y = a+b;
      z = a+2*b;
      end
      首先把這個(gè)函數(shù)編譯成C++接口的DLL。為此,我們需要先設(shè)置MATLAB編譯器。具體做法是在MATLAB命令行執(zhí)行“mbuild -setup”。然后用下面這行命令把myadd2函數(shù)編譯成一個(gè)C++接口的DLL:

      二、
      mcc -W cpplib:libmyadd2 -T link:lib myadd2 -C 
      不加 -C 不會(huì)生成 libmyadd2.ctf文件
      結(jié)果,我們將會(huì)得到包含libmyadd2.dll,libmyadd2.ctf,libmyadd2.h,libmyadd2.lib等在內(nèi)的一些文件。接下來(lái)我們只需要這四個(gè)文件。
      三、
      創(chuàng)建一個(gè)Win32 Console的VC++工程,把以上四個(gè)文件拷貝到VC++工程的源代碼所在目錄。
      接下來(lái)設(shè)置VC++,讓它能找到MATLAB接口函數(shù)的定義及連接庫(kù)函數(shù)??梢杂袃煞N設(shè)置方式:一種是改VC++6.0中關(guān)于VC++的設(shè)置,這樣的好處是每個(gè)新的工程都能自動(dòng)獲得這個(gè)設(shè)定;而另一種是只改當(dāng)前工程的設(shè)置,也就是設(shè)置只對(duì)該工程有效。這里用后一種方式。

      進(jìn)行項(xiàng)目必要的設(shè)置(注意這里和VC2005有較大不同,與matlab2010也不同)。vc主界面進(jìn)入project>Settings,點(diǎn)C/C++選項(xiàng)卡,Category選擇Preprocessor,
      Additional  include directories下填入如下路徑
      C:\Program Files\MATLAB\R2009a\extern\include
      VC6.0調(diào)用MATLAB生成的COM組件 <wbr>(dll方式:簡(jiǎn)單加法)

      點(diǎn)“l(fā)ink”選項(xiàng)卡,Category選擇General,在下面的Object/library modules 那欄的最后添加
      libmyadd2.lib mclmcrrt.lib
      兩個(gè)庫(kù)之間以及和其他庫(kù)以空格隔開(kāi)。
      然后Category選擇input,
      Additional  library path下填寫(xiě):
      C:\Program Files\MATLAB\R2009a\extern\lib\win32\microsoft
      如圖
      VC6.0調(diào)用MATLAB生成的COM組件 <wbr>(dll方式:簡(jiǎn)單加法)
      點(diǎn)擊OK。
      至此配置完畢
      在VCcpp文件中
      #include "stdafx.h"后添加
      1. #include <iostream>
      2. #include "libmyadd2.h"
      return 0上面添加
      std::cout << "Hello world!" << std::endl;
               
              if( !mclInitializeApplication(NULL,0) ) 
              
                      std::cout << "Could not initialize the application!" << std::endl;
                      return -1; 
              

              // initialize lib
              if( !libmyadd2Initialize())
              {
                      std::cout << "Could not initialize libmyadd2!" << std::endl;
                      return -1; 
              }

              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[i] = 1.0*i;
              }
              // print output
              std::cout << "a = " << std::endl;
              std::cout << aData[0] << ",\t" << aData[1] << std::endl;
              std::cout << aData[2] << ",\t" << aData[3] << std::endl;

              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);

              // copy data from mwArray to C++ objects

              // allocate outputs
              double *yData, *zData;
              yData = new double[4];
              if( yData == NULL )
              {
                      std::cout << "Failed to allocate memory for yData!" << std::endl;
                      return -1;
              }

              zData = new double[4];
              if( zData == NULL )
              {
                      std::cout << "Failed to allocate memory for zData!" << std::endl;
                      return -1;
              }

              // copy data from mwArray to C++
              y.GetData(yData, 4);
              z.GetData(zData, 4);

              // print output
              std::cout << "y = " << std::endl;
              std::cout << yData[0] << ",\t" << yData[1] << std::endl;
              std::cout << yData[2] << ",\t" << yData[3] << std::endl;

              std::cout << "z = " << std::endl;
              std::cout << zData[0] << ",\t" << zData[1] << std::endl;
              std::cout << zData[2] << ",\t" << zData[3] << std::endl;

              
              // deallocate memory
              delete [] aData;
              delete [] zData;
              delete [] yData;
              }
              catch( const mwException& e)
              {
                std::cerr << e.what() << std::endl;
                        
              }
              // terminate the lib
              libmyadd2Terminate();

              // terminate MCR
              mclTerminateApplication();
      點(diǎn)擊編譯、運(yùn)行即可。
      VC6.0調(diào)用MATLAB生成的COM組件 <wbr>(dll方式:簡(jiǎn)單加法)

      也可將m文件改為:
      function [y,z] = myadd2(a, b)
      % dummy function, just to demonstrate the idea
      y = a+b;
      z = a+2*b;
      x1=0:0.1:10;
      y1=sin(x1);
      plot(x1,y1);
      msgbox('hello world!');
      end
      其他不變,再生成dll文件等加載到VC中,其他不變,看一下效果
      在main()函數(shù)中加一句
      system("pause"); //暫停作用
      //////////////////////////////////////////////
      也可將m文件改為:
      function [y,z] = myadd2(a, b,c)
      % dummy function, just to demonstrate the idea
      y = a+b;
      z = a+2*b;
      x1=0:0.1:c;
      y1=sin(x1);
      plot(x1,y1);
      msgbox('hello world!');
      end
      其他不用改,在VC的main()函數(shù)中加入:
       mwArray c(1, 1,  mxDOUBLE_CLASS);
      c(1,1)=5;
      將調(diào)用函數(shù)改為:
              // call the function
                      myadd2(2, y, z, a, b,c);
      可以了

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類(lèi)似文章 更多