Windows CE Interface/zh TW

From Free Pascal wiki
Jump to navigationJump to search
WinCE Logo.png

This article applies to Windows CE only.

See also: Multiplatform Programming Guide

English (en) français (fr) 한국어 (ko) português (pt) 中文(台灣)‎ (zh_TW)

設定Windows CE介面

要設定Windows CE介面,您需要多裝一個安裝程式,或者是手動設定介面,以下對兩種方法都有詳細的說明,當然,透過安裝程式當然是簡單多了。

使用額外的安裝程式

要用第一次穩定的Free Pascal for Windows CE來安裝WinCE開發環境的動作從來都沒容易過。

逐步教學:

  • 要下載Lazarus編譯器的外加功能安裝程式,您也可以直接下載,同樣從Source Forge的下載網頁就可以找到了。
  • 安裝完成後,您就可以透過Lazarus編譯Win32應用程式,以及arm-wince的應用程式了,當然,要編譯arm-wince應用程式時,您要先變更編譯器選項:

Project->Compiler Option->Paths分頁

    • LCL Widget Type(various): wince

Project->Compiler Option->Code分頁

    • Target OS: wince
    • Target CPU: arm

手動設定Windows CE介面

提供給Windows CE用的編譯器跟執行時期函式庫只有在Free Pascal 2.1.x版裡面才有附。Lazarus的最新版本裡面有包含這一版的Free Pascal。

步驟一 – 您得先在Windows上面把編譯器重新進行編譯,以產生Windows CE-ARM 交叉編譯器,相關指令請見: [移植WinCE].

步驟二 – 您必須用步驟一裡面產生出來的交叉編譯器,把FCL (Free Component Library)重新編譯,請參考[這裡]的指令說明。

步驟三 – 將以下的指令作成批次檔,放在您安裝Lazarus的目錄下,並執行它:

PATH=C:\Programas\lazarus\pp\bin\i386-win32;c:\Programas\arm
make lcl LCL_PLATFORM=wince PP=ppcrossarm.exe CPU_TARGET=arm OS_TARGET=wince

上述指令會編譯出Windows CE可使用的LCL。

步驟四 – 把LazarusPackageIntf 進行交叉編譯,這樣就可以使用第三方視覺元件了,請切換到lazarus\packager\registration目錄:

PATH=C:\Programas\lazarus\pp\bin\i386-win32;c:\Programas\arm
make PP=ppcrossarm.exe CPU_TARGET=arm OS_TARGET=wince

附註: 您必須要在您的專案的unit path中,特地把$(LazarusDir)\packager\units\$(TargetCPU)-$(TargetOS)\ 這個路徑加入,只要您的專案有把FCL設定成必要套件,專案的unit path就一定要加該路徑。

步驟五 – 現在您就可以開始使用Lazarus IDE來設計、編譯、對您的應用程式進行偵錯了。

  • 您可以用跟以下的批次檔類似的指令來編譯您的應用程式:
PATH=C:\Programas\lazarus\pp\bin\i386-win32;c:\Programas\arm
ppcrossarm.exe -Twince -FuC:\Programas\fpc\rtl\units\arm-wince -FDC:\Programas\arm -XParm-wince- test.pas
ppcrossarm.exe -Twince -FuC:\programas\lazarus\lcl\units\arm-wince -FuC:\programas\lazarus\lcl\units\arm-wince\wince -FuC:\Programas\fpc\rtl\units\arm-wince -FDC:\Programas\arm -XParm-wince- windowtest.pas

用Lazarus IDE來編譯Windows CE的專案

附註: 最近常有使用者回報,在進行程式連結的時候,IDE會回報說找不到 "wincemenures.or"這個檔案。您只要從"lazarus/lcl/interfaces/wince"這個目錄裡把該檔案複製到"lazarus/lcl/units/arm-wince"目錄就行了。

就像您要為其他介面跟作業系統的程式進行編譯的動作一樣。 請確定您已經把Lazarus選單裡面的設定設好了: Project->Compiler Option->Paths分頁

    • LCL Widget Type(various): wince

Project->Compiler Option->Code分頁

    • Target OS: wince
    • Target CPU: arm

您還需要把: Environment options-> Files分頁的 compiler path項目設定為 ppcrossarm.exe這個編譯程式。

設定完後,IDE就可以用來編譯您的Windows CE專案了。

在Lazarus IDE裡面對Windows CE軟體進行偵錯

您也能直接在Lazarus IDE裡面對產生的應用程式進行偵錯。

步驟一 – 在Lazarus IDE裡面,選擇Environment->Debugger Options項目,把裡面的debugger path設定為專為WinCE設計的gdb程式所在的目錄,您可以從這裡取得為WinCE設計的gdb程式執行檔:[1]


步驟二 – 如果您使用Microsoft Device Emulator 1.0或2.0,請執行它,並確認您設定讓該模擬器使用128MB的記憶體,在模擬器裡面設定一個與作業系統共用的資料夾。然後在您用來編譯/建立應用程式的批次檔裡面,加入一個命令,把產生出來的WinCE執行程式複製到那個共用的資料夾裡面去。 以下是一個啟動模擬器,並直接設定讓模擬器使用128MB的指令。

start deviceemulator.exe ".\ppc_2003_se\PPC_2003_SE_WWE_ARMv4.bin" /memsize 128 /skin 
".\ppc_2003_se\PocketPC_2003_Skin.xml"

啟動模擬器以後,如果您想停止它,請直接進行儲存並離開 ('save and exit') ,以後想要再啟動的時候,可以直接從開始命令列裡面執行啟動模擬器(或復原模擬器)的捷徑即可。

步驟三 – 執行Device Emulator Manager,並在已經執行的模擬器項目上按滑鼠右鍵,選擇”連接底座”(cradle)。此時,Microsoft的ActiveSync應該會自動跳出來。如果ActiveSync沒有自己跳出來,則請您直接按模擬器裡面的”檔案->與電腦連接”(File->Get connected),如果ActiveSync這時候還是無法認得模擬器,請先”移除底座”,然後再次進行”連接底座”(cradle)的動作。

步驟四 – 把該檔案透過檔案總管複製到 \gdb目錄裡面去。如果這是您第一次使用模擬器,則您必須在'My Pocket PC'這個項目中建立gbd目錄,從檔案總管裡面看到的 ‘My Pocket PC’這個項目就是模擬器的根目錄。(要讓這個動作加速的話,請直接打開一個檔案總管視窗,切換到您建置應用程式的目錄,點選該檔案,按下Ctrl+C,然後到模擬器裡面的 \gdb 目錄裡面按 Ctrl+V把該檔案貼上即可)


步驟五 – 現在您已經可以對您的WinCE應用程式進行偵錯了,您的application.gdb應該會被啟動,它會把arm-wince-pe-stub.exe這個執行檔複製到\gdb目錄裡面,並檢查您的應用程式執行檔已經存在,然後啟動您的程式。 如果您遇到任何錯誤,請確定\gdb這個資料夾是否存在,arm-wince-pe-stub.exe跟您的應用程式執行檔是否位於該資料夾中。使用者常遇到無法把過大的執行檔順利複製到\gdb資料夾裡面的情形,所以我們才希望您讓模擬器使用128MB的記憶體,否則模擬器的預設值是只會使用64MB而已的。

註記:

1. 在WinCE系統裡面,在結束程式後,程式還會繼續被留在記憶體裡面所以您不能把執行檔給覆蓋掉。因此您得從WinCE的控制台(開始->設定)把記憶體裡面執行中的程式個體給刪除,步驟如下 (以下步驟是在模擬器裡面點選的喔): 開始工作列->設定->系統(分頁)->記憶體->執行程式(分頁)->點選您的應用程式名稱->點選”停止”

2. 每次您完成偵錯的步驟後,請勿直接結束程式,而要執行”Program Reset”,來把偵錯程式重置。請注意,這個程序執行過後,有時候您的執行程式個體還會留在模擬器的記憶體裡面,所以請您依照註記1的說明,把該程式執行個體給刪除掉。


安裝與使用Pocket PC 模擬器

1 – 您可以從微軟的網站下載Pocket PC的模擬器. 我所列出的模擬器跟英文版網頁所列的不同,這是微軟Device Emulator 2.0的中文版,大家可以放心下載,不用擔心有語文上的隔閡。

如果您需要正體中文的Windows Mobile 6裝置模擬器,請從這裡下載,請下載 0404\Windows Mobile 6 Professional Images (CHT).msi,安裝裡面有很多個模擬器,您如果不需要行動電話功能的純PDA,安裝後,請執行開始工作列->Windows Mobile 6 SDK->Standalone Emulator Images->Chinese (Traditional)中的Classic裝置即可。

2 – 在英文版網頁裡面,提到建議大家下載微軟的虛擬機器網路驅動程式,好讓模擬器可以具備連線功能,但在中文網頁中提供給大家的是微軟的裝置管理員2.0版,已經內建NE2000驅動程式,可以直接讓模擬器分享電腦網路卡以獲得網路功能了,所以這些驅動程式就免了。

3 – 下載ActiveSync 4.5來安裝,如果您的電腦上已經裝了ActiveSync 4.5或更新的版本,就可以跳過這個步驟,否則,請您到這個網頁把ActiveSync 4.5下載回來安裝,雖然該網頁會要求您註冊,但也別怕,請直接按下繼續,然後選擇不要註冊,還是可以下載回來安裝的。(如果您使用的是Windows Vista,那就不用下載ActiveSync 4.5了,您得下載Windows Mobile裝置中心6.1 (32位元版)或是Windows Mobile裝置中心6.1 (64位元版),請依照您的Windows Vista的版本決定要下載哪一個程式回來安裝。

4 – 設定ActiveSync/Windows Mobile裝置中心6.1,在一般完全不設定的情形下,ActiveSync/ Windows Mobile裝置中心6.1只能辨識插入USB插槽的Windows Mobile裝置,模擬器是無法被辨識的。請您依照下列步驟進行設定: ActiveSync 4.5: 檔案->連線設定: 允許連線到下列其中一個裝置 : 請選擇 DMA

Windows Mobile裝置中心6.1: “行動裝置設定”->”連線設定”: 勾選”允許連線到下列其中一個裝置”,選擇”DMA”後,按確定鍵。

至此,您已經有了完整功能的PocketPC模擬器了,它已經可以用來跟Lazarus進行應用程式開發的工作了。

要在模擬器上面對Lazarus開發的應用程式進行偵錯,您需要透過ActiveSync/Windows Mobile 裝置中心6.1來使用GDB,不然就只能直接執行了。

在模擬器上面執行應用程式

1 – 點選Windows開始工作列->Windows Mobile 6 SDK->Standalone Emulator Images->Chinese (Traditional)中的Classic裝置,如果您需要具備電話功能的Pocket PC裝置,則請您點選其它的模擬裝置,裡頭有多種不同螢幕解析度的模擬裝置喔。

2 – 如果您從來沒有為這個模擬裝置設定任何共用資料夾的話,請現在幫它設定好,設定的方法如下: 點選模擬裝置視窗上面: 檔案->設定->一般(分頁) 最底下有個共用資料夾,點選右邊的按鍵選擇一個系統中的資料夾即可。

設定完畢後,您就有了可以跟Windows CE模擬裝置共用的資料夾,也就能把您用Lazarus作出來的Windows CE執行檔從這裡放到模擬裝置上面去執行了。

3 – 在模擬裝置上面點選: 開始->程式集,然後在畫面中點選”檔案總管”,然後從下拉式選單中,您就可以選擇”Storage Card”。”Storage Card”這個資料夾就是您剛剛設定的共用資料夾了,如果您是把執行檔放在這個資料夾裡面,直接點它,就可以從模擬裝置上面執行它了。

螢幕截圖

以下我們用Free Pascal與Lazarus+WinCE的一個簡單範例來測試交叉編譯器: Capture 2.jpg Wince.PNG

要怎麼新增一個視覺元件呢?

範例: TButton.

TButton是在lcl/buttons.pp這個檔案中定義的。它是一個跟作業系統無關的LCL元件,所以不管是開發哪一種平台應用程式的程式設計人員都能使用到它。

它的視覺化類別(widgetset class)則是寫在lcl/widgetset/wsbuttons.pp這個檔案中,這是所有視覺化元件的基礎,與平台無關的(可以支援qt, carbon, gtk, win32等)。

它的wince介面類別則在lcl/interfaces/wince/wincewsbuttons.pp這個檔案裡:

 TWinCEWSButton = class(TWSButton)
 private
 protected
 public
   class function  CreateHandle(const AWinControl: TWinControl; const AParams: TCreateParams): TLCLIntfHandle; override;
 end;

每個WS類別,實際上都做了一些需要進行註冊的動作,您可以在每個wincewsXXX.pp檔案結尾的initialization區段裡看到:

 RegisterWSComponent(TButton, TWinCEWSButton);


請注意,DestroyHandle也是需要被實現的,它會被用來把這些控制項所用到的記憶體空間釋放掉。

請同時參照

下載


本網頁的更新記錄