2014-12-04 73 views
0

我有一個MATLAB代碼可以工作,但是當我將它轉換成exe時,它給了我一個錯誤,說它找不到在該代碼中運行的m文件。這是代碼。獨立的matlab exe不起作用

clear all 
str = sprintf('MyInput.txt'); 
fp = fopen(str,'r'); 
N= fscanf(fp,'%d',1)*2; 
for i=1:N 
    a=sprintf('phtoh0_%d',i); 
    b=sprintf('phtoh0_%d.mat',i); 
    run(a); 
    save(b) 
    clearvars -except N fp str 
end 

錯誤是phtoh0_1未找到。 任何幫助表示讚賞。

+0

你確定'phtoh0_1'與你的可執行文件在同一個文件夾中嗎? – Hoki 2014-12-04 08:42:07

+0

是的,他們在同一個文件夾中。 – shweta 2014-12-04 11:55:24

回答

2

您無法使用run()有用編譯的Matlab代碼。因爲它是一個動態調用,所以Matlab編譯器不會看到你調用函數的依賴關係,所以它不會被編譯。您需要將其更改爲函數,並使用顯式引用,編譯器編譯指示或編譯器選項強制將其包含在編譯代碼中。然後用str2func而不是run作爲常規函數。

即使您在編譯好的exe文件所在的目錄或cd所在的目錄中獲得了普通的Matlab phtoh0_1.m文件,編譯後的Matlab程序將不會運行它,除非它包含在原始編譯中。 Matlab組件運行時將拒絕運行非混淆的Matlab代碼。

+0

如果我將phtoh_1.m轉換爲EXCEL文件並嘗試使用xlsread從不同的目錄中讀取它,那麼MATLAB代碼也可以工作,但是exe不會與xlswrite在同一個程序中起作用。我不明白這個問題。 – shweta 2014-12-04 11:52:19