|
[
2007/07/03 15:18 | by bruce_wu ]
|
前言:
由於這幾3、4年來寫的程式都是 PHP 及 VB .Net ,而 C++ 是我大約是10年前有在寫的東西,但後來都偏向 WEB APP 所以及沒有再碰 C++ 了,直到這幾天有朋友要我幫他寫一個簡單的資料庫查詢應用程式,本來寫好了一個 VB .NET 版的,我我始終覺得 VB .NET 寫出來的東西執行效率不是很理想,於是使用 C++Builder 2007 來寫這樣的東西,但好久沒有玩 C++ 了,真的是變化很大,但參考已經寫好的 VB .NET 版本中變化成 C++ 版本。
問題:
程式都寫好沒問題,然後將 Compile 後的執行檔給朋友,結果在朋友的電腦上卻無法執行,會出現找不到某些.BPL檔的,但在我的電腦上卻可以執行
發生原因:
找了一些資料,說明了會產生這種狀況的原因很多,例如:
1. 使用了適用於不同環境的指令或 API,例如:使用了僅支援 WIN2000 或更新系統的 API,但是拿到 WIN98 上執行。
2. 使用到某些外部檔案(.DLL、.DAT...等),而其它機器上並未安裝那些檔案,或是那些檔案的版本不符合程式所需。
3. 程式內存取了需要權限等級較高的資料,程式開發者的權限等級可能較高,因而不容易發生問題,其它機器上的用戶權限等級可能較低,因此無法存取某些資料。
4. 程式對記憶體需求過大而其它機器的記憶體不敷使用,或是程式有記憶體外洩的的現象,通常開發程式的機器上會安裝較多的記憶體,短時間的運作不容易發現問題,當移到其它記憶體較少的機器上時,會很快就發生記憶體上的問題。
5. 程式內流程不當,在較快(或較慢)的機器上執行不會出錯,但是拿到其它速度較慢(或較快)的機器上執行時,會因指令執行過慢或過快而產生一些奇怪的問題。
6. 產生的程式在複製到其它電腦上的過程出錯,因此未能正常運作。
7. 程式內未對一些例外狀況做適當處理,導致程式容易當掉。
8. 程式中有使用到某些硬體週邊,而其它機器上並未安裝那些設備。
9. ....等等。
總之,問題的可能性還是蠻廣的..
解決方式:
但我想我的問題比較單存,因為我只是程式對 Access (.mdb) 做存取而已
所以我就是著將程式 "Compile 成單一執行檔" 的方式來試試看,也就是不要將程式做成 "執行檔 + Runtime Packages" 的方式,看看問題是否與 BCB Runtime Modules 或是外部函式庫有關?
實際作法:
1. 在 BCB IDE 環境中依序選擇下列的選單項目:
從 Project -> Options -> Packages
將 Build with Runtime Packages 項目的勾選取消掉
從 Project -> Options -> Linker
將 Dynamic RTL 項目的勾選取消掉
2. 重新編譯成 .exe 檔案 (程式檔案會變得較大些)。
3. 複製到其它電腦上再做測試。
就這樣我朋友的電腦就可以執行了,問題終究解決了,問題就是我朋友的電腦上沒有安裝 BCB Runtime,所以我就必須將程式 Compile 成單一執行檔,這樣程式在其他電腦上才能正常執行。
1

現今所謂的現世報,活生生上演(桃園離奇縱火案 嫌犯被撞亡)
為 Asus A8JS 貼上 Leader-JS 14吋寬螢幕『奈米靜電』LCD保護貼 -【鏡面增艷抗刮型】
2007/07/03 15:18 | by

