使用VS2017運行Matlab生成的動態鏈接庫DLL

一、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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章