DELPHI中BUG修改備忘

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

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

Delphi中Messagedlg用法

1 if messagedlg 即將退出,是否繼續? 2 mtconfirmation mbyes mbno 0 mryes then 3b...

發現了一個delphi的form的bug

考,delphi窗體控制代碼會變,我寫註冊熱鍵程式的時候發現的。試試這樣的 ,放到checkbox中看看。 showmessage intt...