matlab開啟和生成使用.p檔案和exe檔案

小木匠_發表於2016-05-12

      首先,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/


相關文章