使用Carbide.vs與VS.NET2003構(gòu)建Symbian開發(fā)平臺-S60 平臺
1.簡介
???? 在過去的幾年里從事Symbian OS/C++的開發(fā),選擇什么樣的IDE開發(fā)環(huán)境是一件很讓人郁悶的事。微軟的Visual C++ 6.0 缺乏人性化的設(shè)計,而VS.NET卻不能很好地支持Symbian Os/C++的開發(fā),Borland C++ BuilderX Mobile Edition 還有Metrowerks CodeWarrior也并不是每個人都會喜歡的,幸運(yùn)的是自從諾基亞的Carbide.vs出現(xiàn)后,開發(fā)Symbian OS/C++的應(yīng)用程序變得非常方便與簡單。
???? 什么是Carbide.vs呢,正確地說Carbide.vs并不是一個類似 VS.NET或Codewarrior 一樣的IDE開發(fā)環(huán)境,Carbide.vs是一個插件,一個能夠處理Symbian OS Sdk命令行并改善VS.NET編寫的Symbian os c++ 應(yīng)用程序代碼的一個插件,同時Carbide.vs也很好地集成到了VS.NET的IDE開發(fā)環(huán)境中,有了Carbide.vs我們編寫起Symbian os c++應(yīng)用程序?qū)兊酶菀住⒏奖恪⒏旖荨?/p>
???? 本文適合于想學(xué)習(xí)Symbian C++ 應(yīng)用程序開發(fā)的的初學(xué)者,如果你對SDK還有IDE的選擇感到疑惑或者你已經(jīng)對VS.NET的集成開發(fā)環(huán)境很熟的話,建議你采用Carbide.vs,你會發(fā)現(xiàn)Carbide.vs+VS.NET 2003的搭配開發(fā)起來會更順手,更容易。
?2.準(zhǔn)備工作
???? 在你準(zhǔn)備編寫此教程的實(shí)驗(yàn)時,請確保你的電腦滿足了以下的軟件環(huán)境(開發(fā)symbian os c++ 必備)
? 1.Microsoft Visual Studio.Net 2003 :
?????????? 這個是必備的,我們將會使用VC++.NET 2003進(jìn)行Symbian os c++的開發(fā),所以VC++.NET是必裝項(xiàng)目。
??2. Java JRE:
????????????Carbide.vs和Symbian os 的SDK都要求要Java JRE的運(yùn)行環(huán)境 ,不然無法安裝,請到
http://sun.java.com
下載最新版本的JRE
?3.ActivePerl:
?????????? 必備的軟件 請到
http://www.activestate.com/Products/ActivePerl/
下載
?4.Symbian OS Series 60 SDK:
?????????????
這個是最重要的,SDK自帶了Symbian 的手機(jī)模擬器與編譯連接環(huán)境,至于選擇哪個版本的SDK要具體看你要開發(fā)的手機(jī)機(jī)型 ,如果不清楚要選擇哪個SDK的話,請到
http://www.forum.nokia.com/devices
查看機(jī)型對應(yīng)的SDK并進(jìn)行下載,在這里,我們面向的是 Series 60 第二版的SDK。在這里可以下載到S60系列的所有SDK
http://forum.nokia.com/info/sw.nokia.com/id/4a7149a5-95a5-4726-913a-3c6f21eb65a5/S60-SDK-0616-3.0-mr.html
??5.Carbide.vs:
????????????
我
們的主角,請到
http://forum.nokia.com/carbide
選擇Carbide.vs下載
?在用VS.NET 2003開發(fā)Symbian 項(xiàng)目的時候可能有些人會碰到 類似 “Error Spawning CL.exe” 的錯誤,可以通過這種方法來解決 ,依次打開菜單 工具->選項(xiàng)->->項(xiàng)目->VC++目錄 在右邊可執(zhí)行目錄中確保
C:\Symbian\8.0a\S60_2nd_FP2_SC\epoc32\tools
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE
三項(xiàng)的存在,如果不存在的話,請?zhí)砑舆M(jìn)去(請對應(yīng)SDK與VS.NET的路徑進(jìn)行修改)
3.開始使用carbide.vs
?打開VS.NET 2003 依次打開菜單 文件 新建->項(xiàng)目 在項(xiàng)目名稱里填入 HelloWorld ,選擇合適的保存目錄,請注意保存的目錄路徑中不能有空格的存在,并且最好把項(xiàng)目保存在跟Symbian os sdk 相同的驅(qū)動器下,最后按確定
??? ?接下來你會看到Carbide.vs的設(shè)置向?qū)?在這里。你可以設(shè)置要使用的SDK,本教程里是使用S60 2.X FP2的SDK,主要是面向操作系統(tǒng)是Symbian os 8.0a 的手機(jī)開發(fā)的,你可以選擇特定的SDK開發(fā)平臺開發(fā)你的應(yīng)用。在此向?qū)Ю铮氵€可以設(shè)置此程序的其它參數(shù),比如項(xiàng)目名稱,項(xiàng)目的目錄結(jié)構(gòu),UID等等信息。在這里我們選擇了S60 2.X FP2的SDK并用了 S60 Viewed based application的項(xiàng)目模板,用于開發(fā)多視圖的s60 應(yīng)用程序。
??? ?運(yùn)行向?qū)гO(shè)置完畢后按Finish按鈕,Carbide.vs就幫我們把項(xiàng)目相關(guān)的文件生成好了并顯示在VS.NET 2003的項(xiàng)目資源管理器中了,想看看運(yùn)行效果?按F5,VS.NET便開始幫你生成應(yīng)用程序并自動調(diào)用手機(jī)模擬器,打開后定位到HelloWorld軟件,打開,是不是一個簡單的多視圖S60應(yīng)用程序出現(xiàn)了,恭喜你,你現(xiàn)在已經(jīng)開始你的Symbian os c++軟件開發(fā)之旅了。
?在這里我要說明一下,也許有網(wǎng)友會問我UID是什么東西,UID其實(shí)就是標(biāo)識一個軟件的一種序列號,關(guān)于UID的說明不在教程范圍內(nèi),請在網(wǎng)上搜索相關(guān)的資料。
?
?也有人會問我怎么他的模擬器跟我的很不一樣啊?他那個是默認(rèn)的藍(lán)色的很單調(diào)的模擬器,而且也是沒有主題的。而我卻是有一個諾基亞6630的模擬器而且也帶了漂亮皮膚的,Symbian sdk的模擬器其實(shí)是可以換膚的,至于模擬器內(nèi)部操作系統(tǒng)的主題也可以更換,具體請瀏覽本站的相關(guān)文章 給Symbian的模擬器換皮膚(換成我們喜歡的手機(jī)皮膚) 下載此你所喜歡的皮膚并配置模擬器,再次啟動時你就可以看到新的皮膚界面了,以后就不用再對著那又藍(lán)又丑的模擬器界面了。呵呵呵
4.在HelloWorld里面顯示圖像
?接下來我們將讓HelloWorld項(xiàng)目顯示一個簡單的圖像。第一步,制作 一張 bmp 的圖像文件,并保存到你的項(xiàng)目的路徑下的 data 目錄下,在教程里的項(xiàng)目是保存在C:\Symbian\Dev\HelloWorld\中的,所以我們制作 了一張 名為 Picture.bmp 的圖像文件并保存在 C:\Symbian\Dev\HelloWorld\data 目錄下,或者你可以直接通過打開VS.NET 2003的項(xiàng)目資源管理器,在data目錄上右擊選擇 添加->添加現(xiàn)有項(xiàng)->選擇Picutre.bmp以添加到項(xiàng)目中去。
?對于位圖文件,Symbian 建議把所有的位圖都打包進(jìn)一種擴(kuò)展名為 *.mbm 的文件里面,*.mbm 其實(shí)是一種位圖集文件,里面可以包含很多的位圖,類似于windows平臺的資源文件,將程序里要用到的位圖打包進(jìn) *.mbm 文件里后,我們在程序里就可以很方便 地使用這些位圖文件。在還沒有第三方輔助工具的應(yīng)用前,要打包位圖生成 *.mbm 需要自己編寫腳本去實(shí)現(xiàn),現(xiàn)在有了Carbide.vs我們可以很方便地將我們的位圖打包進(jìn) *.mbm 文件里面,只要我們在 項(xiàng)目名.mmp (在教程里是HelloWorld.mmp) 文件上點(diǎn)擊右鍵選擇。Bitmap Collection Tool ,打開后選擇 Current Directory 指定你的data目錄,就會在左下角的Available bitmaps 列表中顯示可用的位圖文件,然后再把你所需要的位圖文件移到右邊的 Selected bitmaps 中,Display size:在這里我們設(shè)置成了 176 x 208 因?yàn)槲覀兪且蒘60 2.x的應(yīng)用程序,所以我們選擇 176 x 208的分辨率
????? 編輯完成后編譯生成一下項(xiàng)目,這樣就會在SYMBIAN 的模擬器目錄中生成 一個所謂的 HelloWorld.mbm 與 HelloWorld.mbg 文件,在SYMBIAN的SDK目錄下搜索找到? HelloWorld.mbg并用記事本打開,你可以看到以下的類似內(nèi)容
?
?enum TMbmHelloworld
?{
?EMbmHelloworldPicture
?};
?
?????? 這個枚舉類型TMbmHelloworld就是HelloWorld項(xiàng)目的位圖定義了,剛才我們已經(jīng)添加了一個名為Picutre.bmp的位圖文件,EMbmHelloworldPicture就是對應(yīng)了我們的那個Picutre.bmp位圖文件,接下來我們的任務(wù)就是讓HelloWorld顯示這個位圖。
?在這之前我們提過HelloWorld.mbm文件,其實(shí)這個才我們程序里真正要載入的位圖資源文件。打開HelloWorldContainer.h,在CEikLabel類的定義前面輸入以下代碼
??
?#include "HelloWorld.mbg"
?_LIT(KMbmFileName,"HelloWorld.mbm");
????? ?剛看到 _LIT 很多人會問起這是一個什么函數(shù)啊,其實(shí)這個不是函數(shù),這個是一個預(yù)定義宏,在這里我們通過_LIT宏將"HelloWorld.mbm"這個字串賦值給KMbmFileName常量,其實(shí)在Symbian 里面沒有類似windows平臺的字符串類型(string),取得代之的是被稱做 描述符(descriptor)的對象 。關(guān)于描述符的更多幫助請查看相關(guān)的資料。
????? Symbian os 手機(jī)操作系統(tǒng)的文件系統(tǒng)與windows的文件系統(tǒng)是類似的,所以只給出一個"HelloWorld.mbm"文件不足以讓程序找到這個文件的具體位置并裝載進(jìn)程序里,此時我們需要取得這個文件在操作系統(tǒng)里的絕對路徑,請打開 HelloWorldContainer.cpp 文件,在CHelloWorldContainer::ConstructL 函數(shù)里添加以下的代碼,
?
?TFileNamefullName(KMbmFileName);
?CompleteWithAppPath(fullName);//自動為文件名添加文件路徑
???????在這里我們創(chuàng)建了一個標(biāo)準(zhǔn)的可修改標(biāo)識符fullName,包含了我們的mbm文件名,接下去的第二行代碼則把應(yīng)用程序的路徑添加到這個fullName中,使fullName成為一個絕對的文件路徑。估計到這里,你應(yīng)該可以猜出ConstructL函數(shù)是什么意思了吧?呵呵,好了,讓我們編譯一下程序,跟蹤一下fullName是一個什么路徑吧,按上F5,等待............不是吧,出錯了,VS.NET報出了
error C3861: “CompleteWithAppPath”: 即使使用參數(shù)相關(guān)的查找,也未找到標(biāo)識符 的錯誤,有過一定編程基礎(chǔ)的人會想到肯定是哪個文件或庫沒有給引進(jìn)來,猜對了,我們需要把一個 aknutils.h 的頭文件包含進(jìn)我們的源代碼中,請打開 HelloWorldContainer.h 并加入 #include "aknutils.h"。加完后再試試,是不是已經(jīng)不會報錯了?
??????? 如果你想知道fullName到底會是一個什么樣的值,你可以在?CompleteWithAppPath(fullName);的下一行代碼處設(shè)置一個斷點(diǎn),按F5編譯生成并運(yùn)行模擬器,打開你的程序,運(yùn)行到了斷點(diǎn)處時,程序會停下來,光標(biāo)定位在了IDE窗口,通過IDE的自動窗口我們可以看到fullName此時的值 。
???????????? 此時我們發(fā)現(xiàn)fullName的值為 Z:\System\Apps\helloworld\HelloWorld.mbm,(如果你沒有發(fā)現(xiàn)以上的窗口,請依次打開VS.NET的菜單 調(diào)試->窗口->自動窗口)。在這里 Z 代表了手機(jī)模擬器的驅(qū)動器,當(dāng)你安裝到了目標(biāo)手機(jī)上后,這個驅(qū)動器就會變成C,或者是E了。
????????????? 好了,接下來我們來讓程序顯示出我們添加的位圖。首先我們在HelloWorldContainer.h 頭文件中添加以下代碼
?CFbsBitmap* iImage;
?????????? 接著定位到HelloWorldContainer.cpp 的ConstructL函數(shù)中,在我們之前編寫的代碼下面輸入
?iImage = new (ELeave) CFbsBitmap();
?User::LeaveIfError(iImage->Load(fullName,EMbmHelloworldPicture));
?
?????????? 再定位到 HelloWorldContainer.cpp 的Draw()函數(shù) 并在最后面輸入
?gc.BitBlt(TPoint(0,0),iImage);
???????????這樣就通過了圖形上下文(graphics context,gc)將你的位圖復(fù)制到了屏幕的左上角。
????????? 編譯一下,OH,MY GOD ,又出錯。具體錯誤信息為
?HelloWorld error LNK2019: 無法解析的外部符號 "public: __thiscall CFbsBitmap::CFbsBitmap(void)" (??0CFbsBitmap@@QAE@XZ) ,該符號在函數(shù) "public: void __thiscall CHelloWorldContainer::ConstructL(class TRect const &)" (?ConstructL@CHelloWorldContainer@@QAEXABVTRect@@@Z) 中被引用
?HelloWorld error LNK2019: 無法解析的外部符號 "public: int __thiscall CFbsBitmap::Load(class TDesC16 const &,long,int)" (?Load@CFbsBitmap@@QAEHABVTDesC16@@JH@Z) ,該符號在函數(shù) "public: void __thiscall CHelloWorldContainer::ConstructL(class TRect const &)" (?ConstructL@CHelloWorldContainer@@QAEXABVTRect@@@Z) 中被引用
??????????? 還是同樣的原理, 我們要引入一個庫文件才能解決這個問題,請在項(xiàng)目資源管理器中右擊項(xiàng)目->屬性->配置屬性->鏈接器->命令行 ,在右邊的 附加選項(xiàng) 中輸入 fbscli.lib?
???????? 再次編譯,OK了,好現(xiàn)在我們運(yùn)行這個程序,哈哈,圖像在我們的程序里顯示出來啦。好高興。
?

??????? 可是當(dāng)我們退出程序時卻出現(xiàn)了程序已關(guān)閉的錯誤。
??????? 我的天哪,怎么會這樣呢,為什么我的程序不能正常退出呢,遺憾的是模擬器只提示了很簡單的錯誤提示,并沒有更詳細(xì)的錯誤報告,我們可以通過在 C:\Symbian\8.0a\S60_2nd_FP2_SC\epoc32\wins\c\System\Bootdata 下創(chuàng)建一個 ErrRd 的空文件以讓模擬器顯示詳細(xì)的錯誤信息(請在相應(yīng)的SDK目錄下操作),此時我們再次運(yùn)行模擬器打開HelloWorld并關(guān)閉它,現(xiàn)在是不是提示信息多了一點(diǎn)呢?
????? ?模擬器報出了 ALLOC:17B18158 的錯誤,像這種類型的錯誤大多數(shù)情況下是因?yàn)槲覀兪褂昧四硞€對象后忘記關(guān)閉它并釋放此對象的內(nèi)存導(dǎo)致的,為了保證程序的正常運(yùn)行,我們要在使用一個對象后及時將它刪除掉,于是我們定位到了HelloWorldContainer.cpp的~CHelloWorldContainer (析構(gòu)函數(shù)) 中 輸入以下代碼
?
?delete iImage;
?? ?當(dāng)我們再次編譯運(yùn)行程序后,就不會再出現(xiàn)那討厭的出錯對話框了。
?
5.讓我們添加一些功能
?
?我們已經(jīng)實(shí)現(xiàn)了在程序里顯示位圖的功能了,接下來我們將實(shí)現(xiàn)一個登陸框的功能,到時將會用到資源文件。
5.1 為菜單添加項(xiàng)目
?打開 HelloWorld.loc 文件,定義菜單的文本
?
?#define qtn_view1_login_item "Login"
?打開HelloWorld.hrh ,修改THelloWorldCommandIds 的枚舉定義,改成以下
?enum THelloWorldCommandIds
?{
???? EHelloWorldCmdAppTest = 1,
???? EHelloWorldCmdLogin
? };
?EHelloWorldCmdLogin其實(shí)就是對應(yīng)了菜單項(xiàng) "Login"
?程序的菜單資源定義在了 HelloWorld.rss 文件中,我們打開這個文件,找到以下的定義
?
RESOURCE MENU_PANE r_helloworld_app_menu
??? {
??? items =
??????? {
??????? MENU_ITEM { command = EHelloWorldCmdAppTest; txt = qtn_appl_option_item; },
??????? MENU_ITEM { command = EAknCmdExit; txt = qtn_appl_exit; }
??????? };
??? }
?把EHelloWorldCmdAppTest 替換成EHelloWorldCmdLogin,再把qtn_appl_option_item替換成qtn_view1_login_item ,這樣我們就把程序選項(xiàng)菜單的第一項(xiàng)替換成 "Login" 了。
?
?
5.2 創(chuàng)建登陸框
?
??????????? 在這里我們要創(chuàng)建一個登陸框,用于生成用戶名和密碼的對話框,按照傳統(tǒng)的Symbian OS C++開發(fā),我們本來應(yīng)該在HelloWorld.rss 里定義資源,但是有了Carbide.vs后我們卻可以利用 Carbide.vs提供的功能非常方便地生成我們所要的資源,請打開 HelloWorld.rss 定位到文件的最后,點(diǎn)擊右鍵->Add Fragment 將會出現(xiàn)Carbide.vs提供的生成資源窗口,在Template 處選擇 S60 Multiline query dialog ,在下方會出現(xiàn)此對話框的效果圖,就是我們所要的登陸框樣子,按下一步,指定一個比較有效的名字,r_login_query ,最后按Finish生成資源,你將會發(fā)現(xiàn)HelloWorld.rss多了幾行內(nèi)容,這就是r_login_query的資源定義。
?RESOURCE DIALOG r_login_query {
??flags = EGeneralQueryFlags;
?buttons = R_AVKON_SOFTKEYS_OK_CANCEL;
?items = {
??DLG_LINE {
???type = EAknCtMultilineQuery;
???id = EMultilineFirstLine;
???control = AVKON_DATA_QUERY {
????layout = EMultiDataFirstEdwin;
????label = "Username:";
????control = EDWIN { maxlength = 8; };
???};
??},
??DLG_LINE {
???type = EAknCtMultilineQuery;
???id = EMultilineSecondLine;
???control = AVKON_DATA_QUERY {
????layout = EMultiDataSecondSecEd;
????label = "Password:";
????control = SECRETED { num_letters = 8; };
???};
??}
?};
}
?為了要讓程序更通用,本地化起來,我們有必要將UserName與Password的值定義到.loc文件中,打開HelloWorld.loc文件,加入以下定義:
?
?
?#define qtn_username "UserName:"
?#define qtn_password "Password:"
??接下來我們來編寫代碼讓這個登陸框顯示出來,請打開HelloWorldView.h 先加下以下文件的引用
?#include <AknQueryDialog.h>
?#include <aknnotewrappers.h>
?#include <StringLoader.h>
?#include "HelloWorld.hrh"
?再加入處理函數(shù)的聲明
?
?void HandleLoginL();
?接著打開HelloWorld.loc 我們還要定義一些要顯示的文本
?
?#define qtn_login_success "Congretulation You Have Loged in"
?#define qtn_login_fail "Sorry you have the wrong username or password"
?#define qtn_login_cancel "You have canceled the login"
?分別定義了登陸成功,登陸失敗,與取消登陸的三種顯示文本
?打開HelloWorld.rss文件,加入資源定義
?
?RESOURCE TBUF r_login_success { buf = qtn_login_success; }
?RESOURCE TBUF r_login_fail { buf = qtn_login_fail; }
?RESOURCE TBUF r_login_cancel { buf = qtn_login_cancel; }
?這樣我們就能在程序中動態(tài)裝入這些資源了,繼續(xù)打開HelloWorldView.cpp文件,實(shí)現(xiàn)HandleLoginL函數(shù)的定義
?void CHelloWorldView::HandleLoginL()
?{
???? _LIT(KCorrectLogin,"bention");//定義正確的用戶名
?????_LIT(KCorrectPwd,"123456");//定義正確的密碼
???? //顯示對話框
???? TBuf<8>?username(_L(""));
???? TBuf<8>?password(_L(""));
???? CAknMultiLineDataQueryDialog* dialog=CAknMultiLineDataQueryDialog::NewL(username,password);//聲明登陸對話框?qū)ο?/p>
?????if (dialog->ExecuteLD(R_LOGIN_QUERY)) {//調(diào)用登陸對話框
???????? if (username.Compare(KCorrectLogin)==0 && password.Compare(KCorrectPwd)==0) {
???????//登陸成功
???????CAknConfirmationNote* note = new (ELeave) CAknConfirmationNote();//定義一個信息提示框
???????HBufC* notePrompt=StringLoader::LoadLC(R_LOGIN_SUCCESS);//裝載R_LOGIN_SUCCESS文本資源,以顯示登陸成功信息
???????note->ExecuteLD(*notePrompt);//打開對話框
???????CleanupStack::PopAndDestroy(notePrompt);
????}
???else {
?????? //登陸失敗
???????CAknErrorNote* note = new (ELeave) CAknErrorNote();//定義一個錯誤提示框
???????HBufC*? notePrompt=StringLoader::LoadLC(R_LOGIN_FAIL);//裝載R_LOGIN_FAIL文本資源,以顯示登陸失敗信息
???????note->ExecuteLD(*notePrompt);
???????CleanupStack::PopAndDestroy(notePrompt);
???}
?}
?else {
??????//取消登陸
??????CAknWarningNote* note = new (ELeave) CAknWarningNote();//定義一個警告提示框
????? HBufC* notePrompt=StringLoader::LoadLC(R_LOGIN_CANCEL);//裝載R_LOGIN_CANCEL文本資源,以顯示取消登陸警告信息
??????note->ExecuteLD(*notePrompt);
??????CleanupStack::PopAndDestroy(notePrompt);
??}
?}
?接下去我們還差啥?就差把HandleLoginL放在處理菜單命令的函數(shù)中了,定位到HandleCommandL 中,HandleCommandL 是用來專門處理事件的,我們在switch結(jié)構(gòu)中加入
?case EHelloWorldCmdLogin:
??{
???HandleLoginL();
???break;
??}
?其中的EHelloWorldCmdLogin 就是我們的登陸按鈕啦,這樣就實(shí)現(xiàn)了當(dāng)我們點(diǎn)擊了Login按鈕后就會調(diào)用HandleLoginL去做相應(yīng)的處理。
?好了編譯一下,我頂,又出錯,呵呵,別急,你還得在項(xiàng)目里引入? commonengine.lib 文件呢,具體做法與 引入fbscli.lib 文件一樣,記得要跟fbscli.lib之間隔開一個空格喲。
?
?好了,大功告成,現(xiàn)在再次編譯,成功,運(yùn)行,打開軟件,點(diǎn)擊Login菜單項(xiàng),輸入,是不是成功了?興奮?郁悶?
?
?
?????? 現(xiàn)在我們的程序全都是英文的,或許有人會問我為什么不用中文的啊,比如UserName為什么不寫成用戶名?呵呵,說實(shí)在的,我蠻懶 的,因?yàn)槲覀儾荒苤苯釉谫Y源文件里直接定義一個中文文本,在我寫的文章中有一篇關(guān)于在Symbian中如何顯示中文的文章, 關(guān)于SymbianSeries?60開發(fā)的中文顯示問題 有興趣的可以查看 ,按照文章的步驟去做相應(yīng)的修改后你的程序就直接顯示中文啦。至此,本文的實(shí)戰(zhàn)代碼也到一段落了。
6.導(dǎo)入已有的Symbian os c++項(xiàng)目
?利用 Carbide.vs我們可以很方便 地導(dǎo)入現(xiàn)有的Symbian os c++項(xiàng)目,在打開VS.NET 2003后我們依次點(diǎn)擊 文件->Import Symbian Project .出現(xiàn) 導(dǎo)出向?qū)В灰x擇項(xiàng)目的 .mmp 文件就可以導(dǎo)入了,剩下的不用我廢話了吧,聰明的你一定可以非常輕易地完成 。
7.后記
?Carbide.vs的確是一個非常不錯的VS.NET 2003輔助開發(fā)Symbian Os c++ 應(yīng)用的工具,有了它,你還會用vc++ 6.0 嗎,讓我很爽的一點(diǎn)是用Carbide.vs基本上不用去手動配置SDK路徑了與EPOCROOT此類變量了。用Carbide.vs懶得有理,哈哈,寫起應(yīng)用來也非常方便 。希望大家在看了本文后會喜歡上這個工具。
8.項(xiàng)目源文件下載
為了方便大家查看, 我把這 個helloworld項(xiàng)目的所有源文件打包供大家下載,大家在使用時只要導(dǎo)入mmp文件就可以使用了。
代碼下載:
點(diǎn)擊下載此文件
?聲明:本文是我在參考了《Getting Started with Nokia's Carbide.vs 2.0 Development Tools》? Andreas Jakl / Mopius 寫的英文教程后自己修改了部分東西并翻譯成中文而寫成的,原版大家可以到http://www.mopius.com 下載。寫這份教程是為了方便不喜歡E文或E文水平不高的同學(xué)方便學(xué)習(xí)的,由于本人表達(dá)能力有限,不足之處請大家多多指教
轉(zhuǎn)載請注明出處,謝謝合作。
Made in 藍(lán)色憂郁(Bention,翁培鋮?
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1355561