2014-12-31 40 views
0

我試圖製作一個使用.dll文件的.m文件,我希望能夠將我的腳本傳遞給其他人而不會出錯。唯一的問題是,如果你指定的話,matlab總是從matlabroot或者某個驅動器開始搜索。包含此項目的文件夾的位置將因用戶而異。所以我不能簡單地使用功能:搜索從Matlab目錄下的.m開始的路徑

loadlibrary("C:\Users\Public\Documents\projectFolder\file.dll", "C:\Users\Public\Documents\projectFolder\file.h") 

在我.m文件假設每個用戶都在"C:\Users\Public\Documents"項目文件夾。

我想看看是否有針對MATLAB才知道其中.m文件,並在這條道路開始的一種方式,那麼也許我可以設置代碼像這樣:

path = [some code which finds the path of .m file]; 

loadlibrary(strcat(path, 'file.dll'), strcat(path, 'file.h')); 

感謝

回答

0

MATLAB要求任何.m文件在它運行之前處於其搜索路徑中(我認爲這不是真的,但如果不是這樣,它會大聲抱怨)。用戶可以很容易地從他們的路徑中添加和/或減去目錄,所以這是一個安全的假設,如果用戶已經安裝了你的腳本,他們已經把它放在他們的MATLAB路徑的某個地方。如果他們沒有,並且他們嘗試運行它,MATLAB會彈出一個對話框警告腳本不在路徑中,並詢問他們是否想暫時添加它。

至於如何找到它,以及如何使用這些信息,你會做這樣的事情:

scriptLocation = mfilename('fullpath'); 
[directory,name,extension] = fileparts(scriptLocation); 
dllLocation = fullfile(directory,[name '.dll']); 
headerLocation = fullfile(directory,[name '.h]); 

loadlibrary(dllLocation, headerLocation); 
+0

謝謝你的回答,雖然關於必須是在一個.m文件的一部分搜索路徑是不真實的,我從來沒有(雖然他們真的應該是)。我希望能有這樣的解決方案,但我想我只希望用戶有足夠的常識來做出假設。 –

+0

我目前沒有MATLAB在我面前來測試它,但即使它不在路徑中,「mfilename」命令仍然可以找到當前腳本。在這種情況下,這將適用於所有情況。 – craigim