一、Matlab生成動態鏈接庫DLL
前提:電腦中有C/C++編譯器(例如VS)
1、在matlab中打開需要生成的文件 “文件名.m”
例如Main.m;
2、在下方命令行中輸入
mex -setup
選擇使用C/C++的compiler;
3、再輸入
mbuild -setup
選擇使用C/C++的builder,注意與上一致;
4、生成動態鏈接庫DLL
輸入
mcc -W lib:動態鏈接庫名稱 -T link:lib 文件名.m
生成C的DLL;
輸入
mcc -W cpplib:動態鏈接庫名稱 -T link:lib 文件名.m
生成C++的DLL;
5、生成下列文件(我的動態鏈接庫名稱爲mydll)
二、配置VS2017
1、新建一個控制檯project,將上述生成的文件複製到這個工程文件夾下面;
3、Matlab與VS的位數一致(都是x86或者x64)
若Matlab是x64,而VS是x86,則會報錯:
警告 LNK4272 庫計算機類型“x64”與目標計算機類型“x86”衝突
修改VS到x64的方法如下:
(1)右側解決方案中,右擊,“屬性->鏈接器->高級->目標計算機”設置爲"MachineX64 (/MACHINE:X64)";
(2)“屬性->鏈接器->命令行->其他選項”設置爲" /machine:X64 /debug ";
(3)“生成->配置管理器->活動解決方案平臺”勾選兩個對應於“Win32”(x64)的選項;
(4)“生成->配置管理器->活動解決方案平臺”設置爲" X64 "。
3、添加路徑
(1)右側解決方案中,右擊,“屬性->VC++目錄->包含目錄”,編輯添加
...自己補全安裝目錄\MATLABr2018a\extern\lib\win64\microsoft
(2)“屬性->VC++目錄->庫目錄”,編輯添加
...自己補全安裝目錄\MATLABr2018a\extern\include
(3)“屬性->鏈接器->輸入->附加依賴項”
mydll.lib
mclmcrrt.lib
(4)如果提示“mclmcrrt.h”不存在
在安裝目錄\MATLABr2018a\extern\lib\win64\microsoft中找到這個文件,然後複製到在工程下的自己新建lib文件夾,“屬性->VC++目錄->引用目錄”,編輯添加這個lib文件夾。
三、運行DLL
VS主函數main的簡單框架如下:
#include "stdafx.h"
#include "mydll.h"
int main()
{
mydllInitialize(); //初始化DLL動態連接文件
mxArray *input[1]; //將輸入參數傳遞進去,根據自己需要補充代碼設置
mxArray *output[1]; //定義輸出參數指針
mlxMain(1, output, 1, input); //調用m函數,即mlx+.m中的函數名
mydllTerminate(); //結束DLL庫
}
函數的對應改寫方法可以參考:https://ww2.mathworks.cn/help/compiler_sdk/cxx/matlab-compiler-generated-interface-functions.html