2008-05-15 15:55 REALbasic 2008 R2 在 Windows 中編譯的程式無法執行?
REALbasic 官方秉持著每 3 個月發佈一個新的版本的原則,在 2008 年 5 月中發佈了 REALbasic 2008 R2 版。有興趣的人可以看一下它的 Release Notes。
在 REALbasic 2008 R2 中有個比較大的改變就是,現在編譯後除了產生單一的執行檔之外,還有可能會有其它的 DLL 檔。如果在您的程式中沒用到其它 plugins 的話,編譯後還是單一的執行檔;但如果有到的話,那編譯後除了執行檔之外,還有會有必要的 DLL 檔。
假設您專案中 App 的 WindowAppName 值為 My Application.exe 的話,那輸出的結構將會變成
My Application
My Application.exe
My Application Libs
Appearance Pak.dll(假設有用到)
My Custom Plugin.dll(假設有用到)
其中存放 DLL 的資料夾名稱會是 WindowsAppName + " Libs"
讓我們來看產生後的實例:
暫時先撇開為什麼要分成這樣及這樣的好處跟壞處。先來看這樣的改變產生了什麼問題。
在 REALbasic 專案中 App 的 WindowsAppName 值就是編譯後的執行檔名稱。但在 REALbasic 2008 R2 中若是用非 ASCII 碼的 WindowsAppName 且有用到其它 plugins 時,那麼輸出時 Libs 資料夾中將不會有任何的 DLL 檔,而該執行檔本身也是有問題的。
來做個簡單的實驗:
先把 App 的 WindowsAppName 設為範例.exe
然後在 Window1 中放上一個 PushButton 及 EditField
然後把它編譯成執行檔,因為我們沒用到其它 plugins,所以就只會有單一的執行檔:範例.exe。接著我們執行看看
看來是很正常;接著我們在 PushButton1 的 Action事件中加入程式
這邊我們用了 MD5 函式,雖然它是 REALbasic 中有提供的方法,不過也是透過外部的 DLL 來作用的,因此在編譯時會有一個 MD5.dll 的檔案。
接下來再編譯成執行檔,看一下輸出的結構
乍看之下好像是正常的,不過進到範例 Libs 資料夾中來看的話,就會發現裡面什麼檔案都沒有
硬是去執行範例.exe 時就會發生錯誤
就算我們再把 MD5.dll 放到範例 Libs 資料夾中也是一樣的問題。
目前的解決方法就是不要用非 ASCII 碼來設定 App 的 WindowsAppName 值。
所以,我們把 App 的 WindowsAppName 改為 Sample.exe
然後再來編譯一次,此時的執行檔名就會變成 Sample.exe
其中的 Sample Libs 資料夾也有 MD5.dll 檔了
而程式也能正常的執行
如果在這邊把執行檔名跟 Libs 資料夾名稱改為其它的話,一樣是會出現錯誤的喔!
除了這個問題之外,若 REALbasic 專案的儲存路徑有非 ASCII 碼時,也會有同樣的問題。暫時的解決方法就是把 REALbasic 專案的儲存路徑改成全為 ASCII 碼的囉。
REALbasic 官方已經知道這問題並修正了,但好像是要在 2008 R3 中才要發佈修正,現在各位就只能自己先避開這些問題囉!
我要評分:





