當前位置:編程學習大全網 - 編程語言 - 怎樣用matlab生成vs可調用的dll形式的com組件

怎樣用matlab生成vs可調用的dll形式的com組件

1.在matlab中生成dll

在m文件中實現如下功能:

獲得N個魔方矩陣的秩。m文件的內容如下:

function r = mrank(n)

r = zeros(n,1);

for k=1:n

r(k) = rank(magic(k));

end

將上述內容保存為:mrank.m

在matlab的command 窗口鍵入:

>> mcc -B csharedlib:mrank mrank.m %該命令將在後面做說明

在matlab7.0中執行上述命令後生成下面幾個文件:

mrank.exp mrank.exports mrank.h mrank.lib mrank.c mrank.dll

在vs2008中使用m文件的函數功能。

首先配置vs2008的環境

1.工具——> 選項——>項目和解決方案——>VC++目錄

(1) 選擇“可執行文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\bin\win32(註意:當前的Mathlab安裝在C:\Program Files下面)

(2)選擇“包含文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\include

(3)選擇“引用文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib

(4)選擇“庫文件”下拉框,添加:C:\Program Files\MATLAB\R2010b\extern\lib\win32\microsoft

上述環境只需要配置壹次

對於每壹個工程,做下面的設置

項目——>屬性——>連接器——>輸入

選擇:附加依賴項:添加:

libmex.lib

libmx.lib

libmat.lib

mclmcrrt.lib

將mrank.h mrank.lib mrank.dll拷貝到當前目錄下

cpp文件中中的內容如下:

#include "stdafx.h"

#include<stdlib.h>

#include"matrix.h"

#include"mrank.h"

#include "mclmcrrt.h"

#pragma comment(lib,"mrank.lib")

int main()

{

mxArray *N(NULL),*R(NULL);

int n =12;

mrankInitialize();//初始化動態鏈接庫

N = mxCreateDoubleScalar(n);//用n來初始化生成的數組,其實標量就是壹個1*1的數組

mlfMrank(1,&R,N);//執行m文件的主要功能

size_t num = mxGetM(R);//R的行的個數

double *res = new double[num];

memset(res,0,sizeof(double)*num);

memcpy(res,mxGetPr(R),sizeof(double)*num);

for(int i=0;i<num;++i)

printf("%f\n",res[i]);

delete[] res;

mxDestroyArray(N);

mxDestroyArray(R);

mrankTerminate();//終止動態數據連接

return 0;

}

上述cpp文件使用了Matlab編譯m文件生成的dll,在cpp中通過mxArray這個數據結構來和dll中的方法進行信息交換。

這樣就在cpp中調用了matlab中的m文件實現的方法。

  • 上一篇:那些在公司裏“混”時間的人最後都怎麽樣呢?
  • 下一篇:c++將兩個有序鏈表合並為壹個有序鏈表
  • copyright 2024編程學習大全網