一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

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)容均由用戶(hù)發(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)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多

    欧美日韩高清不卡在线播放| 我的性感妹妹在线观看| 日本高清中文精品在线不卡| 男女激情视频在线免费观看| 麻豆91成人国产在线观看| 少妇激情在线免费观看| 夜夜嗨激情五月天精品| 亚洲免费视频中文字幕在线观看| 亚洲欧美国产网爆精品| 日本午夜免费福利视频| 国产精品午夜福利免费在线| 日本乱论一区二区三区| 国产视频一区二区三区四区| 亚洲精品中文字幕无限乱码| 国产麻豆成人精品区在线观看| 午夜精品久久久99热连载| 一区二区三区欧美高清| 日韩人妻欧美一区二区久久| 亚洲中文字幕免费人妻| 亚洲最新的黄色录像在线| 日本在线不卡高清欧美| 国产一级精品色特级色国产| 久久综合狠狠综合久久综合 | 精品丝袜一区二区三区性色| 欧美国产在线观看精品| 日韩成人动画在线观看| 91后入中出内射在线| 欧美日韩国产精品自在自线| 大伊香蕉一区二区三区| 粉嫩内射av一区二区| 国内精品伊人久久久av高清| 国产亚洲精品一二三区| 日韩一级欧美一级久久| 亚洲国产精品无遮挡羞羞| 日韩成人h视频在线观看| 精产国品一二三区麻豆| 国产精品成人免费精品自在线观看 | 99秋霞在线观看视频| 国产99久久精品果冻传媒| 久久精品偷拍视频观看| 国产日韩综合一区在线观看|