matlab開啟和生成使用.p檔案和exe檔案
首先,P檔案為了保護智慧財產權設計的一種加密檔案,是不能檢視的。執行比較簡單,和呼叫m檔案方法一樣。
下面是一些解釋。
P檔案是對應M檔案的一種預解析版本(preparsedversion)。因為當你第一次執行M檔案時,Matlab需要將其解析(parse)一次(第一次執行後的已解析內容會放入記憶體作第二次執行時使用,即第二次執行時無需再解析),這無形中增加了執行時間。所以我們就預先作解釋,那麼以後再使用該M檔案時,便會直接執行對應的已解析版本,即P檔案。但又因為Matlab的解析速度非常快,一般不用自己作預解析。只有當一些程式要呼叫到非常多的M檔案時,如GUI應用程式時,才會作預解析,以增加以後的呼叫速度。
P檔案可以用來作保密程式碼之用,如果你給別人一個M檔案,別人可以開啟來看到你所有的程式碼和演算法。如果你的程式碼不想被別人看到,那可以給他P檔案。
一、如何使用.p檔案
1.首先,將當前工作目錄切換到.p檔案所在的目錄,然後就可以在左側的工作空間視窗看見該目錄所包含的所有檔案了,當然包括.p檔案啦~
2.由於.p檔案是.m檔案的預解析版本(不能檢視、編輯),顯然.p檔案同.m檔案一樣都是一個函式體,只不過此時該函式是一個黑盒子罷了。舉例如test.p檔案便意味著存在一個已經編好的函式test(如何實現我們不知道),為呼叫這個函式test,我們需要知道它的引數形式此時在命令視窗下鍵入help test,即可檢視到test函式的引數然後我們就可以呼叫啦
如何自己製作.p檔案
在Matlab中,我們經常把語句或函式寫在一個M檔案裡,便於模組化和程式碼重用,比如,寫一個test.m的檔案(即自定義一個test函式):
%———————-
%test.m
a =1;
b =2;
%———————-
這個M語句檔案,或:
%———————-
%test2.m
functiona = test2(b)
a =b * 2;
%———————-
這個M函式。
我們在Command Window裡輸入:
>>test
即是等於輸入了
>>a = 1;
>>b = 2;
而輸入:
>>a = test2(2)
a =
4
便是執行了一個函式。
以上的內容我想大部份人都知道是怎麼一回事了,以下說一說P程式碼檔案。
如果在Command Window裡輸入:
>>pcode test
便會在相應test.m的資料夾裡產生了test.p。如果這時在Command Window裡輸入:
>>test
其實是執行了test.p,而不是test.m。
P檔案是對應M檔案的一種預解析版本(preparsed version)。因為當你第一次執行M檔案時,Matlab需要將其解析(parse)一次(第一次執行後的已解析內容會放入記憶體作第二次執行時使用,即第二次執行時無需再解析),這無形中增加了執行時間。所以我們就預先作解釋,那麼以後再使用該M檔案時,便會直接執行對應的已解析版本,即P檔案。但又因為Matlab的解析速度非常快,一般不用自己作預解析。只有當一些程式要呼叫到非常多的M檔案時,如GUI應用程式時,才會作預解析,以增加以後的呼叫速度。
如Matlab的當前目錄(Current Directory)有test.m檔案,作預解析後,又有test.p檔案。因為P檔案的呼叫優先順序比M檔案要高,所以當你呼叫test時,會作優先選擇而呼叫了test.p。
可以修改test.m的程式碼為:
%———————-
%test.m
a =3;
b =4;
%———————-
再在Command Window裡呼叫test:
>>test
Warning:P-file C:\Program Files\MATLAB71\work\test.p is older than M-file C:\ProgramFiles\MATLAB71\work\test.m.
C:\ProgramFiles\MATLAB71\work\test.p may be obsolete and may need to be regenerated.
Type"help pcode" for information about generating P-files from M-files.
會出現一個Warning,警告你所呼叫的P檔案比同名的M檔案要舊,即表示M檔案已被修改了。儘管如此,呼叫的還是舊的P檔案,即得出a = 1和 b = 2。
P檔案可以用來作保密程式碼之用,如果你給別人一個M檔案,別人可以開啟來看到你所有的程式碼和演算法。如果你的程式碼不想被別人看到,那可以給他P檔案。
pcode函式也可以應用在M函式檔案。
二、生成.exe檔案加密
他的缺點是不能夠脫離Matlab單獨執行,必須還在command window裡面呼叫,可移植性不強。如果生成.exe檔案就可以解決這個問題。
生成.exe檔案的方法稍微複雜點:
1、首先要保證你的程式是函式型的,而不是指令碼形式的。如果是指令碼形式的也不要緊,只需要在指令碼檔案第一行新增 function []=name()即可。
2、然後,在command window裡用mcc -m -B sgl file.m命令生成.exe檔案,期間會讓你選擇編譯器(我的是VC6.0),會發現生成了一堆檔案。
3、將上步生成的那一堆檔案一起拷到待執行的機器。此時仍需matlab所必需的動態連線庫。將 <matlab path>/extern/lib/win32/mglinstallar.exe拷貝到到待執行機器上。
4.在待執行的機器上先執行mglinstallar.exe,然後選擇解壓目錄,將在將在指定目錄下解壓縮出bin和toolbox兩個子目錄,其中在bin\win32目錄下就是數學庫和圖形庫脫離MATLAB執行所需的所有動態連線庫,共有n個。可以將這些.dll考入system32,也可以直接放在應用程式目錄下(我把它拷在應用程式目錄下了)。而toolbox目錄則必須與應用程式同一目錄。
5.大功告成,雙擊.exe即可執行了。
總結:兩種方法都可以達到保護原始碼的目的,但是各有各的優缺點。生成p檔案的優點是方法簡單,生成檔案大小隻是原始碼的3倍左右,缺點是不能脫離matlab環境執行。生成.exe檔案的優點是可以脫離matlab單獨執行,缺點是生成的檔案大小是原來的幾千倍(5555555555,當然包含那些.dll檔案,體積最龐大的一部分)。就拿我的程式做個比較,原始碼是8.34K,生成p檔案22.6K,生成可執行檔案(含那些.dll)共30多兆。
生成exe的參考地址;http://wenku.baidu.com/link?url=ketdfiY7WyeYLxud6n9NPGLL_f7KX9dPTZtCevvj0ADTTTUf6GQ_A4KgUH1RxDh39gjHij9XF-6K4OZlgyudpCrYnhu6W0WCn7QwmasbuV3
原文地址:http://zmryyj.blog.163.com/blog/static/98450751201132081451490/
相關文章
- Matlab生成exe檔案Matlab
- Matlab生成.exe格式檔案Matlab
- matlab (.m)檔案生成 windows 可執行(.exe)檔案MatlabWindows
- PyCharm GUI介面開發和exe檔案生成PyCharmGUI
- MATLAB生成.coe檔案和.mif檔案程式碼示例Matlab
- 利用IDEA和exe4j生成exe檔案及資原始檔和so、dll檔案的放置Idea
- Patch檔案的生成和使用
- 使用MATLAB開啟.bdf腦電檔案Matlab
- matlab生成exe獨立執行檔案已破解(好用)Matlab
- MATLAB生成coe檔案Matlab
- TC中開啟檔案和寫入檔案
- 從Matlab到FPGA(Matlab生成coe檔案或mem檔案)MatlabFPGA
- #用openfiledialog檔案和savefileDialog開啟和儲存檔案
- JAVA語言的開啟檔案和寫入檔案Java
- MATLAB生成可執行檔案Matlab
- 使用matlab生成rom初始化檔案.coeMatlab
- jvm 生成javacore和heapdump檔案JVMJava
- 【MATLAB】讀取和寫入文字檔案Matlab
- 將Jar檔案製作成exe檔案JAR
- 當編譯VC專案時提示不能開啟生成的動態庫.dll或者.exe檔案編譯
- Notepad++外掛安裝和使用和開啟大檔案
- 檔案和檔案系統
- pageoffice線上開啟word檔案生成表格
- 使用pyinstaller打包exe檔案教程
- jar檔案換成exe檔案問題?JAR
- python讀取和生成excel檔案PythonExcel
- java呼叫exe檔案Java
- 減小Delphi xe系列生成的exe檔案大小
- 執行時生成其它EXE檔案(VB6)
- .NET 中的動態編譯(生成exe檔案)編譯
- 標頭檔案生成器-javah.exe(轉)Java
- AIX和Redhat的passwd檔案和shadow檔案AIRedhat
- .ora檔案、.dbf檔案和.dat檔案的區別
- locate標頭檔案和庫檔案
- 資料庫檔案和檔案組資料庫
- win10有個exe檔案為什麼打不開_win10系統無法開啟exe檔案如何解決Win10
- Python如何生成windows可執行的exe檔案PythonWindows
- ipynb檔案用什麼開啟 ipynb檔案怎麼開啟