1. 程式人生 > >網狐框架二次開發常見bug問題彙總

網狐框架二次開發常見bug問題彙總

本人工作中遇到的一些bug解決經驗,有些是本人所在公司所用特定的技術才會遇到的問題,這部分可以忽略,MFC和WINDOWS方面的還是有一定參考價值。

1.EraseBk()函式不響應,沒有加初始化函式.
2.載入圖片是白板,初始化函式裡的語句有問題.
3.子視窗在父視窗外面,或者移子視窗位置大小子視窗不聽話,是因為子視窗屬性沒有設定為Child.
  子視窗不能被拖動,是因為style屬性沒有被設定為:popup.
4.DDX_Control函式崩潰,不識別控制元件的ID,可包含Resource.h標頭檔案解決.
5.滾動條不停閃動,是因為預設焦點在那上面.把焦點移走即可解決.
6.按鈕從畫的背景圖片中透出來,是因為背景在不斷的重新整理,可檢查是否有Timer函式中在進行重新整理的動作.
  問題在於先重繪按鈕,再重繪底圖,導致按鈕從底圖中透出來,可再次手動重繪按鈕解決此問題.
7.視窗背景圖片不顯示,是因為在初始化函式中進行了擦除,而類中卻沒有EraseBknd()函式.
8.背景圖片背景全黑,是因為XML檔案中沒有設定背景為透明.
9.程式碼中對控制元件位置的設定無效,可能是沒有將變數和控制元件繫結
10.一個控制元件被其他控制元件遮住,可強制重繪這個控制元件解決此問題.
11.滾動條突然滾出一個很大的數字,是因為用了: a += (-scollinfo.npos);不用+=,直接賦值就無此問題.真尼瑪奇葩的bug.其實是數學計算上的問題,自己當時想多了.
12.DDX_Control函式崩潰,無提示,可能是父視窗和子窗口出現同樣ID的控制元件,導致衝突.之前刪除的按鈕執行時依然出現,可重新全部把解決方案生成一遍以解決此問題.
13.radiobutton,讀取XML檔案,圖片扭曲,是因為控制元件高度太小,圖片和文字錯位,是因為控制元件高度太低.
14.重定義預設引數,編譯不通過.函式在標頭檔案中給了預設引數,在原始檔中就不能再設預設引數.
15.CWnd視窗建立失敗,可能是由於資源問題,即資源檢視中的對話方塊資源路徑沒有被找到.必殺技,Create()函式前加:AfxSetResourceHandle(GetModuleHandle(NULL));
16.窗中繪圖扭曲,可能是由於主視窗的尺寸(程式碼中的尺寸,和XML中的尺寸),以及繪製的主背景圖的尺寸不統一的原因.
17.OnEraseBknd()函式,繪製不出來,CDC的問題.DrawText(多位元組)可能導致崩潰.
18.char陣列,最後一位必須是'\0',否則會溢位;
19.combobox下拉框高度被限死,在資源檢視中,把下拉框高度拉一下就行.
20.XML背景圖邊角切割無效, 是因為切割色和背景色沒有同色.
21.SVN清理失敗,可能由於SVN目錄下有exe程式在執行.關閉即可清理成功!
22.載入的dll檔案是release版的,執行時採用debug模式,將會呼叫不到dll檔案.
23.tab鍵順序只與rc檔案中控制元件的程式碼順序一致.且在SetWindowPos中不能新增SWP_NOACTIVE引數,才能正確實設定tab鍵順序.
24.對話方塊的解構函式崩潰,首先可能是析構裡面的成員時崩潰,可先檢查裡面的成員.如果是成員對話方塊,再檢查成員對話方塊裡面的成員.
25.用VC.NET新建工程時,總是報告出:“automation伺服器不能建立物件”錯誤.
不能新建工程可不行,也許是自己在優化系統的時候關掉了某些服務的緣故?從控制面板開啟服務列表看了看,沒覺的有,後來到網上一查,很多人都碰到了這個問題,解決辦法只要開啟“開始”,在“執行”裡輸入: regsvr32 scrrun.dll, 然後回車就搞定。剛開始時在百度裡卻沒有搜到該問題的內容,鬱悶!
26.  分析因載入動態庫遇到的link錯誤時可以考慮從以下幾方面入手:

          1、呼叫的類、函式是否只有宣告沒有定義

          2、呼叫的類或者函式、變數是否export

               a:是否顯示寫上__declspec(dllexport)

               b:在dll匯出的類等檔案較多時,確認是否載入到dll工程編譯(我犯的錯誤)

          3、呼叫的類、函式或者變數在當前工程中應該為__declspec(dllimport)

     通過上面的檢查基本上就可以定位因呼叫dll庫帶來的link錯誤!
27.用函式指標的時候, 宣告函式原型前面要加上typedef, 否則編繹不過.
28.結構體中如果包含有函式,剛初始化時不能記憶體置零,否則函式指標變為空,無法呼叫.
29.程式不報錯,無反應,可能是陷入死迴圈.也可能訊息在轉發過程中被中斷了,可檢視PretranslateMessage或者其他的與訊息轉發相關的函式,看是否有訊息被中斷.
30.除錯執行找不到某dll檔案或者其他檔案,可檢視工程屬性中,輸出目錄路徑是否被改變.
31.有符號數和無符號數做四則運算時,二者都按有符號數計算.
   有符號數和無符號數做大小比較時,二者都按無符號數計算.
32.ADO 錯誤:0x80040e07,從資料型別 char 轉換為 int 時出錯。答: 這是因為呼叫儲存過程時引數傳少了.儲存有一個varchar型的引數沒有傳.
33.在棋樂融融框架中,如ToolTip不能顯示,則可能因為先設定了控制元件的位置,後建立控制元件.順序錯誤導致此顯示bug
34.一個dll中的類不要繫結另一個dll中的視窗資源,否則會出現記憶體無法讀取等導致程式崩潰的未知錯誤.
35.CListCtrl重繪表頭,必須在CListCtrl的OnCreate函式中繫結自繪的表頭,且OnCreate函式必須被呼叫,否則自繪表頭無效.
36.DoDataExchange()方式建立控制元件,對應OnSubWindow()函式,Create方式建立控制元件,對應OnCreate函式.
37.讀取記憶體0x000000出現錯誤,該記憶體不能為read/write,有可能是棧溢位,類中的成員變數太多了.
38.對子視窗呼叫SetWindowPos不起作用,是因為子窗的style屬性沒有被設定為child
39.新工程若引用網狐的面板庫,面板控制元件,介面控制元件,SkinLite三個庫都要引入(標頭檔案,靜態庫,動態庫),否則執行時要出錯.
40.ADO 錯誤:0x800a0cc1,在對應所需名稱或序數的集合中,未找到專案。這種情況一般是查詢的結果集中,沒有該欄位。需要檢查儲存過程的邏輯,是否所有的返回路徑都能保證查詢到相應欄位的值。
41.https打頭的網址打不開的解決方法:IE瀏覽器的工具-Internet選項-高階中,勾選: 1.使用SSL2.0   2.使用SSL3.0   3.使用TLS1.0  4.使用PCT1.0(IE6沒這個選項)  這四個複選框。
 因為與https打頭的網站上的資料互動,需要SSL加密。這四個複選框表示支援此功能。