Biên dịch và cài đặt ví dụ HelloWorld

Một phần của tài liệu Nghiên cứu và xây dựng ứng dụng từ điển trên điện thoại di động (Trang 130 - 138)

A.3.1 Đối với máy ảo

Khi sử dụng SDK cho IDE MS VC++, việc biên dịch, kiểm lỗi trên máy ảo được thực hiện thuận lợi như khi phát triển ứng dụng cho máy tính.

Hướng dẫn cách biên dịch chương trình HelloWorld cho máy ảo bằng SDK 2nd Edition FP 2:

ƒ Đầu tiên chép thư mục %EPOCROOT% \Series60Ex\HelloworldBasic\ vào thư mục gốc ổđĩa C: để tiện sử dụng.

ƒ Vào thư mục \HelloWorldBasic\Group\, dùng công cụmakmake tạo tập tin dự án cho VC7 (C:\HelloWorldBasic\group\makmake helloworld.mmp vc7). Lúc này thư mục Group\ chứa đầy đủ các tập tin dự án của VC++7.0.

ƒ Khởi động .NET và mở dự án vừa tạo:

ƒ Chọn BuildÆRebuild Solution để xây dựng chương trình. Nếu thành công ta có kết quả sau (bỏ qua các warning):

Hình A. 2 Build Solution HelloworldBasic

Lưu ý: Nếu quá trình biên dịch không thành nên xem lại biến PATH của Windows đã đề cập trong phần cài đặt.

ƒ Sau khi biên dịch thành công ta chọn Debug > Start để thực thi ứng dụng. Khi VC .NET hỏi chương trình thực thi ta chọn %EPOCROOT% \epoc32\ release\wins\udeb\epoc.exe (shortcut nằm trong StartÆ All ProgramÆ Series 60 Developer ToolsÆ 2nd Edition SDK Feature Pack 2\1.0 Æ Emulator (Debug)). Lúc này trình giả lập được khởi động:

ƒ Ta dùng chuột nhấn các phím định vị (lên, xuống, trái, phải) hoặc nhấn trực tiếp trên bàn phím để chọn ứng dụng cần thực thi (trường hợp này là HelloworldBasic (HW nằm ở cuối màn hình))

Hình A. 4 HelloWorld trên máy giả lập

ƒ Trong quá trình chạy thửứng dụng trên, ta có thểđặt breakpointở bất kì đâu trong mã nguồn và khi chạy tới đó, IDE sẽ tự động chuyển sang môi trường

debug cho phép ta chạy từng bước, xem giá trị các biến… như một ứng dụng phát triển trên máy tính bình thường.

Lưu ý:

ƒ Các tập tin thực thi (trên máy ảo) được phát sinh tại đường dẫn

%EPOCROOT%\epoc32\release\wins\udeb\z\system\APPS\HelloWorldBasi c\. Nếu không muốn một ứng dụng tồn tại trên máy ảo (vì đã có quá nhiều ứng dụng hay lý do nào khác) chỉ cần vào đường dẫn trên và xóa thư mục của ứng dụng đó đi.

ƒ Ổ đĩa C:\ của máy ảo có đường dẫn: %EPOCROOT%\epoc32\wins\c\. Nếu ứng dụng có liên quan tới tập tin, lập trình viên muốn chạy được trên máy ảo phải chép các tập tin đó vào đường dẫn trên. Lúc này trong ứng dụng, đường dẫn của tập tin cần sử dụng sẽ là: “C:\\...”. (Đương nhiên không thể sử dụng đường dẫn của máy tính trong máy giá lập)

A.3.2 Đối với máy thực

Việc biên dịch ứng dụng cho máy thực độc lập với việc tạo tập tin dự án, phát triển, chạy thử và kiểm lỗi trên máy ảo. Chỉ cần hai tập tin .mmp và bld.inf là có thể tiến hành biên dịch ứng dụng cho máy thật.

Công cụ biên dịch chính mà SDK cung cấp là abld.bat, tuy nhiên mỗi ứng dụng cần một tập tin abld.bat cho riêng nó. Nghĩa là đối với mỗi ứng dụng khi biên dịch trên máy thật, trước tiên cần phát sinh tập tin abld.bat. Việc này được thực hiện bằng công cụbldmake. Tại cửa sổ dòng lệnh nhập:

C:\HelloWorldBasic\group\bldmake bldfiles.

Lúc này dựa vào tập tin bld.inf, tập tin biên dịch ứng dụng abld.bat

được tạo ra trong thư mục Group.

Sau khi đã có tập tin abld.bat, có thể biên dịch ứng dụng cho máy thực theo một trong hai cách:

ƒ Biên dich bằng IDE Ms VC++ 7.0 (MS VC++ 6.0 không thực hiện được):

Hình A. 5 Release build

Chọn Build > Build Solution hoặc Build > Rebuild Solution

ƒ Biên dịch bằng dòng lệnh

C:\HelloWorldBasic\group\abld build thumb urel

Dù thực hiện bằng cách nào, nếu biên dịch thành công, các tập tin thực thi mà quan trọng nhất là tập tin .app sẽ được tạo ra tại đường dẫn:

%EPOCROOT%\Epoc32\Release\thumb\urel\. Lúc này, mọi thứ đã sẵn sàng, chỉ cần dùng makesisđể tạo tập tin cài đặt và tiến hành cài đặt trên máy thực.

Lưu ý:

ƒ Tập tin .pkg sử dụng đường dẫn tương đối để chỉ đến các tập tin thực thi đã phát sinh. Nếu thư mục HelloworldBasic bị di chuyển sang vị trí khác thì đường dẫn này không còn chính xác và máy sẽ báo lỗi khi bạn thực thi lệnh makesis. Có thể sửa lại đường dẫn cho phú hợp trước khi tạo tập tin .sis. Cụ thể với ứng dụng HelloWorldBasic ở trên, tập tin

Helloworldbasic.pkg có phần các tập tin cần cài đặt như sau: ;original sis file

"..\..\..\epoc32\release\thumb\urel\HelloWorldBasic.APP" - "!:\system\apps\HelloWorldBasic\HelloWorldBasic.app" "..\..\..\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" - "!:\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" "..\..\..\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" - "!:\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" "..\..\..\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.aif" - "!:\system\apps\HelloWorldBasic\HelloWorldBasic.aif"

Do đã di chuyển thư mục HelloWorldBasic nên việc sử dụng đường dẫn tương đối (..\..\..\) không đúng. Ta cần sửa lại đường dẫn tuyệt đối như sau trước khi gọi lệnh makesis:

;updated sis file

"%EPOCROOT%\epoc32\release\thumb\urel\HelloWorldBasic.APP" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.app" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.rsc" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic_capt ion.rsc" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic_caption.rsc" "%EPOCROOT%\epoc32\data\z\system\apps\HelloWorldBasic\HelloWorldBasic.aif" -"!:\system\apps\HelloWorldBasic\HelloWorldBasic.aif"

ƒ Bộ SDK 1st Ed phát sinh toàn bộ các tập tin thực thi của một ứng dụng vào đường dẫn đã nêu trên. Trong khi đó SDK 2nd Ed, FP 2 chỉ phát sinh tập tin .app vào đường dẫn này; các tập tin còn lại được phát sinh theo đường dẫn: "%EPOCROOT%\epoc32\data\z\system\apps\Ten_ung_dung\ (*)

Ph lc B Khái nim cơ bn khi lp trình C++ trên h điu hành Symbian

B.1 Các qui ước đặt tên

Môi trường lập trình trên Symbian dùng các qui ước đặt tên để thể hiện ý nghĩa, vai trò và tầm quan trọng của các lớp, biến, hàm trong mã nguồn. Các qui ước này liên quan mật thiết đến việc quản lý tài nguyên (bộ nhớ, tập tin…) vốn rất hạn chế trên điện thoại di động. Cụ thể:

B.1.1 Qui ước đặt tên lớp

Loại Ví dụ Mô tả

Lớp bắt đầu bằng chữ T

TDesC, TPoint, TFileName Các lớp bắt đầu bằng chữ T không có hàm hủy. Nó giống như các kiểu dữ liệu xây dựng sẵn (built-in). Các lớp này cũng thường dùng thay cho struct. Lớp bắt đầu

bằng chữ C

CConsoleBase, CActive, CBase

Bất cứ lớp nào dẫn xuất từ lớp CBase đều bắt đầu bằng chữ C. Các lớp này luôn được cấp phát vùng nhớ trên heap. Lớp bắt đầu

bằng chữ R

RFile, RTimer, RWriteStream, RWindow

Bất cứ lớp nào thao tác với các tài nguyên (file, time, v.v…) đều bắt đầu bằng chữ R (viết tắt của từ Resource). Hầu hết các lớp này đều dùng hàm Close() để giải phóng nguồn tài nguyên mà nó sở hữu. Lớp giao diện bắt đầu bằng chữ M MGraphicsDeviceMap, MEikMenuObserver

Một giao diện (interface) gồm nhiều hàm ảo và không có dữ liệu. Các lớp bắt đầu bằng chữ M dùng trong đa kế thừa.

Các lớp static User, Math, Mem, ConeUtils Một lớp chỉ chứa toàn hàm static. Các lớp này thích hợp dùng chứa các hàm thư viện

Struct SEikControlInfo Kiểu dữ liệu struct thường bắt đầu bằng chữ S. Tuy nhiên, sau này trong Symbian người ta không dùng kiểu struct nữa mà thay vào đó là dùng các lớp bắt đầu bằng chữ T.

Khi lập trình, các lớp T, R, và C được sử dụng nhiều nhất trong đó việc giải phóng vùng nhớ cho các đối tượng lớp C khi sử dụng xong là rất quan trọng. Khi tạo ra một lớp mới, lập trình viên nên tuân thủ nguyên tắc đặt tên này giúp mã nguồn có sự thống nhất, trong sáng và dễ quản lý. Cụ thể lớp mới chỉ có biến thành viên T thì bắt đầu bằng T, chứa một biến thành viên là đối tượng lớp C thì là lớp C.

B.1.2 Qui ước đặt tên dữ liệu

Loại Ví dụ Mô tả

Kiểu enum EMonday, ESolidBrush

Các hằng trong kiểu enum thường bắt đầu bằng chữ E và tên của enum thì bắt đầu bằng chữ T, chẳng hạn EMonday là thành phần của enum TDayOfWeek Hằng số KRgbWhite,

KMaxFileName

Các hằng số thường bắt đầu bằng chữ K Biến thành

viên

iDevice, iSize Biến thành viên của một lớp bắt đầu bằng chữ “i” . Chữ “i” là viết tắt của từ “instance”

Tham số aDevice, aSize Các tham số bắt đầu bằng chữ “a”. Chữ “a” là viết tắt của từ “argument”

Các biến “automatic”

device, size, x, y Các biến automatic là các biến mà việc quản lý vùng nhớ do Symbian thực hiện tự động. Người dùng không cần cấp phát vùng nhớ khi khai báo và không hủy khi sử dụng xong.

B.1.3 Qui ước đặt tên hàm

Loại Ví dụ Mô tả

Hàm “none- leaving”

Foo(), Draw() Hàm “none-leaving” là những hàm trong quá trình thực thi chắc chắn không gặp những lỗi có thể làm sụp chương trình mà không phải do lập trình như thiếu bộ nhớ, người dùng xóa tập tin…Nói cách khác, hàm “none-leaving” bao giờ cũng thực hiện thành công và trả về giá trị lập trình viên đã dự tính.

Hàm “leaving” CreateL(), NewL(), AllocL()

Các hàm “leaving” kết thúc bằng ký tự L. Ngược lại với hàm“none-leaving” một hàm “leaving” là một hàm có cấp phát bộ nhớ, mở file, v.v…, nói chung là thực hiện những thao tác liên quan đến tài nguyên mà có thể không thành công do thiếu tài nguyên hoặc do những điều kiện về môi trường (không phải lỗi do lập trình). Lúc này lập trình viên phải “bẫy” được lỗi xảy ra để không sụp chương trình. Chi tiết về hàm “leaving” sẽ được trình bày trong phần quản lý lỗi.

Hàm LC AllocLC(), CreateLC(), OpenLC()

Cấp phát vùng nhớ cho một đối tượng và đưa đối tượng vào cleanup stack. Sẽ trình bày chi tiết trong phần quản lý lỗi Hàm lấy dữ liệu Size(), Device(), GetTextL()

Các hàm này thường là danh từ và dùng để truy cập đến các biến private trong một lớp. Các hàm truy cập dữ liệu có liên quan đến tài nguyên (bộ nhớ, file, v.v…) thường kết thúc bằng chữ L và bắt đầu bằng chữ Get. Các hàm thiết lập SetSize(), SetDevice(), SetTextL()

Các hàm này thường bắt đầu bằng chữ Set và dùng để gán giá trị cho một thuộc tính, thông thường là thuộc tính private trong một lớp. Các hàm có liên quan đến tài nguyên thường kết thúc bằng chữ L.

Bảng B. 3 Qui ước đặt tên hàm

Lưu ý: lập trình viên không bắt buộc phải tuân theo các qui ước đặt tên trên. Tuy nhiên tất cả các lớp, biến, hằng số, tên hàm… của Symbian đều được đặt theo qui ước này. Nên muốn phát triển ứng dụng cho hệ điều hành Symbian, lập trình viên bắt buộc phải biết các qui tắc này. Đồng thời khi xây dựng các lớp mới hay kế thừa cho ứng dụng của mình, lập trình viên rất nên tuân theo qui ước này nhằm giúp mã nguồn trong sáng, dễ hiểu, dễ bảo trì và chuẩn hóa.

Một phần của tài liệu Nghiên cứu và xây dựng ứng dụng từ điển trên điện thoại di động (Trang 130 - 138)

Tải bản đầy đủ (PDF)

(145 trang)