日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

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

 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
首先把這個函數(shù)編譯成C++接口的DLL。為此,我們需要先設(shè)置MATLAB編譯器。具體做法是在MATLAB命令行執(zhí)行“mbuild -setup”。然后用下面這行命令把myadd2函數(shù)編譯成一個C++接口的DLL:

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

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

點“l(fā)ink”選項卡,Category選擇General,在下面的Object/library modules 那欄的最后添加
libmyadd2.lib mclmcrrt.lib
兩個庫之間以及和其他庫以空格隔開。
然后Category選擇input,
Additional  library path下填寫:
C:\Program Files\MATLAB\R2009a\extern\lib\win32\microsoft
如圖
VC6.0調(diào)用MATLAB生成的COM組件 <wbr>(dll方式:簡單加法)
點擊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();
點擊編譯、運行即可。
VC6.0調(diào)用MATLAB生成的COM組件 <wbr>(dll方式:簡單加法)

也可將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);
可以了

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多