DELPHI中BUG修改備忘

2022-08-05 13:48:25 字數 1319 閱讀 4142

1.關於sizeof

同樣的**

var   lwindcode : array [0..15] of char;

begin

showmessage(inttostr( sizeof(lwindcode)));

end;

在delphi7和delphi2009下結果分別是16/32,為什麼?

這是因為widechar和ansichar的問題,2009預設的是widechar了,而delphi7是ansichar,導致string的長度也發生了變化!以後要注意了!

2.關於assigned

assigned只是判斷當前值是否為空,而不判斷當前指著的記憶體是不是被釋放,因此釋放的時候要這樣寫:

if assigned(frm) then

begin

frm.close;

frm:=nil;

end;

或者if assigned(frm) then

begin

frm.close;

freeandnil(frm);

end;

3.關於assert(斷言)

用法:   assert(表示式);

如果為假, assert會產生乙個eassertionfailed異常,顯示資訊為:

assertion failed (c:\src\unit1.pas, [size=+0]line 34)

當你不想再使用這些檢查時,可以使用 或 編譯指令.

要想使assert在整個專案中失效,   關閉project options | compiler | assertion 選項

缺點是,頻繁的呼叫會極大的影響程式的效能,增加額外的開銷。

用法總結與注意事項:

1)在函式開始處檢驗傳入引數的合法性

2)每個assert只檢驗乙個條件,因為同時檢驗多個條件時,如果斷言失敗,無法直觀的判斷是哪個條件失敗

3)不能使用改變環境的語句,因為assert只在debug個生效,如果這麼做,會使用程式在真正執行時遇到問題。

4)assert和後面的語句應空一行,以形成邏輯和視覺上的一致感

5)有的地方,assert不能代替條件過濾 

4.關於owner和parent的區別

parent屬性是指構件的包容器,構件只能在此範圍內顯示和移動

owner屬性是指構件的所有者,它負責構件的建立和釋放。

PCL中的bug修改

pcl是比較出眾的雷射點雲處理庫,通常都是自己從原始碼編譯而來,但是編譯出的動態庫在使用的過程在標頭檔案中會報一些奇怪的錯誤,起初天真的以為不可能是原始碼的問題,是自己環境配置的問題,經孫師兄點撥,豁然明白標頭檔案中有錯誤,錯誤的原因是部分函式與系統標準庫重名,導致編譯器解析 從右至左 出現錯誤,舉...

備忘隨筆 git撤銷修改

對工作區中檔案的修改分為三種情況 1 修改,但沒有用git add將修改新增到暫存區 2 修改,已經使用git add將修改新增到暫存區 3 修改,已經使用git add將修改新增到暫存區,並再次進行修改。對於第一種情況,直接使用git checkout 檔案,即可撤銷修改,撤銷修改就回到和版本庫一...

如何修改Delphi自帶控制項

舉例說明 比如要在dialogs單元新增乙個新的函式proc superbirdxp 1 備份delphi的lib目錄中的dialogs.dcu檔案 source目錄中的dialogs.pas檔案。2 新建乙個資料夾比如 delphifolder 2 將source中的dialogs.pas檔案拷貝...