C++程序調用M文件編譯後得到的DLL文件

直接給出步驟:

1)設置Matlab的編譯器,見【MATLAB與C的混合編程】之【MATLAB調用C程序】

2)編譯m文件成dll.

【2.1】

---------建立MyAdd.m-------------

function [c] = MyAdd(a, b);
c = a + b;

-----------------------------------

【2.2】

Matlab中運行mcc -W cpplib:libMyAdd -T link:lib MyAdd

成功後,我們會發現目錄下多了很多文件,其中libMyAdd.dll、libMyAdd.lib、libMyAdd.h爲有用文件,接下來要用到。

3)設置VS2008的“包含文件”、“庫文件”,見【MATLAB與C的混合編程】之【C程序調用Matlab計算引擎】(1)

4)編寫C調用dll.

a)VS2008中建立win32控制檯空項目

b)項目中加載libMyAdd.dll、libMyAdd.lib、libMyAdd.h這三個文件;前兩個放在C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Matlab_C\Debug,後一個放在C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects\Matlab_C\Matlab_C

c)寫代碼,如下:

-----------------------------------------------------------------

#pragma comment( lib, "mclmcrrt.lib" )
#pragma comment( lib, "libmx.lib" )
#pragma comment( lib, "libmat.lib" )
#pragma comment( lib, "mclmcr.lib" )
#include "mclmcr.h"
#include "matrix.h"
#include "mclcppclass.h"
#include "libMyAdd.h"
#include <stdio.h>
#include <iostream>
using namespace std;
int main(void)
{
    double a = 6;
    double b = 9;
    double c;

    // initialize lib,這裏必須做初始化!
    if( !libMyAddInitialize())
    {
        cout << "Could not initialize libMyAdd!" << std::endl;
        return -1;
    }

    // 爲變量分配內存空間,可以查幫助mwArray
    mwArray mwA(1, 1, mxDOUBLE_CLASS); // 1,1表示矩陣的大小(所有maltab只有一種變量,就是矩陣,爲了和Cpp變量接軌,設置成1*1的矩陣,mxDOUBLE_CLASS表示變量的精 度)
    mwArray mwB(1, 1, mxDOUBLE_CLASS);
    mwArray mwC(1, 1, mxDOUBLE_CLASS);

    // set data,不用我解釋了吧,很簡單的,調用類裏面的SetData函數給類賦值
    mwA.SetData(&a, 1);
    mwB.SetData(&b, 1);
    // using my add,掉我自己寫的函數
    MyAdd(1, mwC, mwA, mwB);
    // get data,不用我解釋了吧,很簡單的,調用類裏面的Get函數獲取取函數返回值
    c = mwC.Get(1, 1);
    printf("c is %f\n", c);
    // 後面是一些終止調用的程序
    // terminate the lib
    libMyAddTerminate();
    // terminate MCR
    mclTerminateApplication();
    return 0;
}

-----------------------------------------------------------------

結果如圖:

2011062416202441.jpg

==========================================

注意事項:

1.此程序由於是調用DLL文件,故與Matlab無關,運行時不需要Matlab環境

2.項目視圖如下:

2011062416251623.jpg

【引文】http://hi.baidu.com/hxk622/blog/item/884b5e1daf3d6cf8e0fe0bad.html

發佈了10 篇原創文章 · 獲贊 94 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章