symbian開發中的問題解決匯總(不斷更新中)

來源:互聯網
上載者:User

1.在資源檔中添加了一個功能表項目,.hrh. .rss及handlecommandL都做了相應修改,但運行時總出現這兩個錯誤:

VRex  fatal error U1077: “perl” : 傳回碼“0x1”
VRex  error PRJ0019: 工具從"Building resources from VRex_caption.rss"

在../VC7/bin目錄下添加msobj71.dll,(這檔案在../common/IDE目錄下存在)

環境變數的設定:(作為參考,這隻是我機子安裝相關開發軟體的路徑,請根據自已的實現做相對修改)

Path

C:/Program Files/Common Files/Symbian/Tools;C:/Program Files/PC Connectivity Solution/;C:/Perl/bin/;C:/WINDOWS/system32;C:/WINDOWS;C:/WINDOWS/System32/Wbem;C:/Program Files/Java/jdk1.5.0_11/bin;C:/Program Files/Microsoft Visual Studio .NET 2003/Vc7/bin;C:/Program Files/Nokia/CodeWarrior for Symbian v3.1/Bin;C:/Program Files/Nokia/CodeWarrior for Symbian v3.1/Symbian_Tools/Command_Line_Tools

CLASSPATH

D:/Tools/Java/jdk1.5.0_11/lib

EPOCROOT

/Symbian/8.0a/S60_2nd_FP2_SC/

 

2.鬱悶:今天編譯器時老提示"Shell error LNK2019: 無法解析的外部符號 "public: __thiscall CameraServer.SetLightingConditions(RCameraServ::ELightingNormal);,該符號在函數 "public: void __thiscall CCameraManager:ConstructL(class TRect const &)" (ConstructL@CCameraManager@@QAEXABVTRect@@@Z) 中被引用"類擬的error.在明明在*mmp已加

LIBRARY         CameraServer.lib ,在cmd 都可編譯通過,可是在vc7老提示上述錯誤.

後來我引入一個庫檔案才能解決這個問題,請在項目資源管理員中右擊項目->屬性->配置屬性->連結器->命令列 ,在右邊的 附加選項 中輸入 CameraServer.lib.

原因:可是有時直接在mmp添加庫檔案是不能生效的.

3.鬱悶   "c:/Symbian/shell/src/ShellAppUi.cpp(457): error C2664: “CAknViewAppUi::AddViewL” : 不能將參數 1 從“CHelpView *”轉換為“CAknView *” "這鬼問題困惑了我一晚上,原來是HelpView.h中沒繼承CAknView.

解決:class CHelpView : public CCoeControl, MEikListBoxObserver,CAknView

4.暫沒解決

error C2243: “類型轉換” : 從“CHelpView *”到“CAknView *”的轉換存在,但無法訪問"

 5.鬱悶.困惑我一天.不過也很爽的.終於解決了.以後多多學習,積累經驗.

Error:EIKCTL 42   一般沒提示哪處出錯或中斷.只會顯示"程式已關閉".

所以很難尋找到出錯的地方,唯有好好增強編程思想.

通過上網查了些有關的資料和請教技術Q群的大俠們.得知:

1.繪製控制項Draw()時出現無效的資源控制代碼,如bitmap等。

2.還有ComponentControl函數是否返回了正確的指標

3.CountComponentControls函數是否返回了正確的控制項數量

通過仔細檢查相關代碼:

 //iHelpListBox = new (ELeave) CAknSingleGraphicStyleListBox;

應用:
    iHelpListBox = new (ELeave) CAknSingleStyleListBox;

因為我採用的是沒表徵圖顯示的ListBox.

 

6. Differences on Coding requirement from WINSCW UDEB emulator
and ARMI UREL real handset compilation:

(1). // this works in Emulator (WINSCW UDEB)
// this fails in ARMI UREL
switch (selection)
{
case EONE:
doSomething();
break;
}

// this works in both Emulator and ARMI UREL
switch (selection)
{
case EONE:
{
doSomething();
break;
}
}

(2). 發現send 的message中用(TDesC)傳入的String在手機都不能顯示

Fixed , 用
方式1: (working in handset)
TBuf<Kshortlen> Kusername;
Kusername.Append(_L("Supersoar"));
msgRegister(Kusername, TRUE, sendBuf);

代替
方式2:
_LIT(Kusername, "Supersoar");
msgRegister((TDesC)Kusername, TRUE, sendBuf);

上面的方式2,Kusername在模擬器沒問題,在手機上不能正常顯示
改成用方式1後用ARMI compile就沒有原來的warning了
(credit: Supersoar)

7.error PRJ0019: 工具從"正在執行預建置事件..."

VS 2003可以在"輸出"視窗中選擇"產生"項來查看更詳細的錯誤資訊.

8.symbian開發過程要注意的一些問題.以下為轉貼:

1:調用可能異常退出的函數時,考慮如果程式在該處退出,將發生什麼問題,必要時清理API函數。
2:任何遊可能發生異常退出的函數應該以L結尾
3:使用(ELeave)來執行個體化對象。但是要記住,這些代碼這時也會異常退出。
4:始終只將一個堆類聲明為一個指標,並通過new來建立堆類,決不以自動變數方式聲明或者執行個體化堆類。
5:如果調用一個以LC結尾的函數,必須從清理棧彈出由該函數返回的指標,否則調用函數退出時,程式會崩潰。
6:對CBase類的對象、簡單buffers和不帶解構函式的對象,只使用CleanupStack::PushL()方法。
7:編寫DLL時,.h檔案內,對希望為DLL使用者可用的函數,在各函式宣告前放置IMPORT_C,並在個函數的實現前面放置EXPORT_C
8:在DLL中不使用可寫的全域資料。任何外部全域變數必須為const類型。模擬器構建可能會繞幸成功,但是在手機上構建時會報錯。
9:在EXE檔案中可使用可寫的全域資料。
10:遵循成員變數、參數、枚舉類型、常量和宏的命名標準。
11:當建立一個在堆中進行執行個體化的對象時,從CBase類派生,並在類名前添加首碼C
12:使用Symbian OS API時,包換SDK文檔指定的標頭檔和匯入庫。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.