日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

1、引言

最近在開發一個項目時,已經用C語言寫好了主要算法部分,并將主要功能實現部分以函數形式封裝到了動態連接庫DLL文件中,但客戶要求提供Matlab調用DLL函數的例子,因此,花了點時間研究了下Matlab語言中調用DLL函數的方法。

為簡單起見,下面以DLL文件中的一個簡單的函數調用為例進行說明(當然是虛構的一個函數了,但也涉及到了常用參數類型如指針、字符串等的傳遞)。

2、DLL文件中函數原型說明

本例調用C語言編寫的DLL文件“MyDll.dll”里的函數“MyFunc”,這個函數原型聲明如下:

#define EXPORT extern "C" __declspec(dllexport)
void MyFunc(double x0, double deltx, int length, double *y, double &lastData, char* status);

該函數產生一個初始值為x0、間隔為deltx、長度為length的一維數組y,并給出該數組的最后一個值lastData和函數的運行狀態信息status。從函數的聲明中可以看出,該函數中參數數據類型涉及到了“double”類型、“int”類型和“char”類型(字符串類型),在參數傳遞中也涉及到了值傳遞(x0、deltx、length)和指針(y、lastData、status)傳遞方式,較為復雜。為便于理解,下面給出該該函數的C語言實現代碼。

/*-------------------------------------------------------------------------------
 *	產生等間隔的數據向量并返回數據向量的最后一個值和狀態信息
 *	輸入:	x0--起始值
 *			deltx--數據間隔
 *			length--數據長度
 *	輸出:	y--產生的向量
 *			lastData--y數組的最后一個值
 *			status--狀態信息
------------------------------------------------------------------------------- */

void MyFunc(double x0, double deltx, int length, double *y, double &lastData, char* status)
{
	 	for (int i=0; i<length; i++)
		{
				y[i] = x0 + i * deltx;
		}
		lastData = y[length-1];

		strcpy(status, "ok!");
}

3、Matlab調用方法

對于上面的MyFunc函數,在Matlab中調用主要涉及到了幾個函數的使用,包括loadlibrary/unloadlibrary、libpointer、calllib等函數的使用,分別實現加載/卸載動態庫、定義指針變量、調用函數等功能。

其Matlab中的調用代碼如下所示:

clc, clear all
loadlibrary('MyDll.dll','MyDll.h');
libfunctions MyDll -full;

x0 = 0;
deltx = 1.1;
length = 10;
pY = libpointer('doublePtr',zeros(1,length));
pLastData = libpointer('doublePtr', 1.0);
pStatus = libpointer('cstring', '');

[~, ~, status] = calllib('MyDll','MyFunc', x0, deltx, length, pY, pLastData, pStatus);
disp(['y: [', num2str(pY.value), ']']);
disp(['lastData: ', num2str(pLastData.value)])
disp(['status: ', status])

unloadlibrary MyDll

其中,通過代碼“libfunctions MyDll -full;”可以顯示dll文件中所有的函數信息。

運行結果如下圖所示:

Matlab如何調用動態連接庫DLL文件的函數?

 

可見,在Matlab中已經成功調用了dll文件中的MyFunc函數并得到了正確的運行結果。

4、備注

在使用calllib函數運行dll文件中的函數時,當參數中傳遞字符類型的指針變量(char *)時,其對應的變量如上例中pStatus的值不會改變,必須通過calllib的返回值得到更新后的值。

本文由編碼那些事原創,請關注+轉發+收藏+點贊,帶你一起長知識!

分享到:
標簽:Matlab
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定