1.首先說我遇到的最大的問題,就是不能用matlab 自帶的編譯器 lcc-win32,用這個可以成功編譯出dll,但是我這裡呼叫老是崩潰。我的matlab版本是2010a的win32版本,後來選用的編譯器是 microsoft visual c++ 2008,可以成功編譯且正確呼叫。
2.設定編譯器的方法
mbuild -setup
然後選擇vs2008,然後後面都是選y,成功後會顯示done
3.遇到重定義的錯誤,如下
error 1 error c2371: 'char16_t' : redefinition; different basic types d:\program files\microsoft visual studio 12.0\vc\include\yvals.h
解決辦法如下定義就可以解決
#include
#if (_msc_ver >= 1600)
#define __stdc_utf_16__
#endif
#include "matrix.h"
#include "mex.h"
4.執行遇到的問題就是一定要安裝mcr的環境
安裝檔案在matlab 的安裝目錄下
我這裡的目錄是
把這個mcrinstaller.exe安裝了,如果你要到其他 的電腦上去執行,就要在哪台電腦上安裝這個。
安裝完後,還要在系統的環境變數path那裡新增執行時環境的路徑,我這裡是
d:\program files (x86)\matlab\r2010a\runtime\win32
5.我只測試了個簡單的函式,就是求和,儲存檔名為add_three.m,**如下
function [ s ] = add_three( a,b,c )
s=a+b+c;
end6.編譯成dll
matlab命令 deploytool
設定name為add,選擇 c shared library
新增剛才的add_three.m檔案,並編譯
7.我是新建了個mfc的工程來測試,要設定matlab的包含目錄
我這裡的路徑是
庫我新增了
libmx.lib
libeng.lib
libmat.lib
libmex.lib
mclmcrrt.lib
8,以下是測試**
#include "add.h"
#pragma comment (lib , "add.lib" )
新增了剛才生成的dll的標頭檔案和lib
void ctestdlg::onbnclickedbutton1()
prhs[0] = mxcreatedoublematrix(1, 1, mxreal);
prhs[1] = mxcreatedoublematrix(1, 1, mxreal);
prhs[2] = mxcreatedoublematrix(1, 1, mxreal);
indata = mxgetpr(prhs[0]);
if (indata)
indata = mxgetpr(prhs[1]);
if (indata)
indata = mxgetpr(prhs[2]);
if (indata)
nlhs = 1;
state =mlxadd_three(nlhs, plhs, nrhs, prhs);
mxdestroyarray(prhs[0]);
mxdestroyarray(prhs[1]);
mxdestroyarray(prhs[2]);
d = (int)mxgetscalar(plhs[0]);
mxdestroyarray(plhs[0]);
addterminate();
}測試後結果正確.d=6
Matlab與VC混合程式設計
眾所周知,matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子 金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來...
Matlab與VC混合程式設計
眾所周知,matlab是一套功能非常強大的商業數學軟體,從訊號處理,語音處理,資料採集,數值運算,影象處理,到電子 金融分析等等,幾乎在各個工業領域,他都已經得到了廣泛應用,同時也取得了巨大的成功。但是,由於matlab是用一種指令碼語言,他的解釋是逐行執行的,程式中所有的變數都是用mxarray來...
C C 和matlab混合程式設計
有些時候使用混合程式設計能夠讓程式更加高效 筆者所使用的matlab軟體為2018a,c 編譯器為microsoft visual c 2017 matlab本身是不帶c c 編譯器的,安裝編譯軟體是必須的 仍然是先從簡單的hello world 開始 首先編寫乙個c 程式 當然也可以c程式 inc...