2013-07-04 46 views
1

函數InvalidateRect(hWnd:HWND; const lpRect:TRect; bErase:BOOL):BOOL;什麼時候Windows.InvalidateRect過載

函數InvalidateRect(hWnd:HWND; lpRect:PRect; bErase:BOOL):BOOL;

在XE2的Windows單元中有兩個重載的定義。在某些情況下,這需要比以前的Delphi版本更特殊的處理,只有後者纔有聲明。

問題是:哪個Delphi版本第一次引入了這個重載?

+1

在這種情況下,這*需要特殊處理*?只是總是使用第二次重載,你會沒事的。 – TLama

+0

D2007只有第二個版本,所以之後就是這樣。不知道爲什麼它很重要,但;正如@TLama所說,如果你只是使用那個,你就沒有問題。 –

+0

所以它在德爾福2009年引入...有提到的超負荷。 – TLama

回答

3

InvalidateRect函數重載:

function InvalidateRect(hWnd: HWND; const lpRect: TRect; bErase: BOOL): BOOL; 

已在2009年德爾福引入雖然,你並不需要做的任何條件函數調用,當你調用函數(過載)與以下(正確)原型:

function InvalidateRect(hWnd: HWND; lpRect: PRect; bErase: BOOL): BOOL; 

這應該存在於所有版本的德爾福(至少那些,與最小的Windows 2k支持)。

+1

好找。 ;)我同意:如果你正在編寫D2009 +的代碼,你可以使用類似Delphi的'new'聲明來隱藏指針,但只要你的代碼需要在舊版本中工作,我認爲你最好使用那一個,而不是使用定義在它們之間切換。 – GolezTrol

+1

問題在於另一個庫聲明瞭兩個變體,可能旨在幫助使較舊的Delphi與較新的Delphi進行源代碼兼容。然而,在較新的Delphi中,當兩個單元(Windows和這個lib)被「使用」時,它們都聲明相同的「重載」函數 - 除非函數完全符合單元名稱,否則會出現「模糊調用」。後者在某種程度上背離了源代碼級別兼容性的想法 –

+0

@GolezTrol對我來說,新的聲明不僅僅因爲它類似於Pascal--而且因爲它是類型安全的。 OTOH我最好只看到Delphi執行了默認的「$ T +」設置,而不是保持Pascal愚蠢的「指針是無類型的」傳統。該死的! '數組'和'TArray '是不同的類型,但是'^ string'和'^ integer'是相同的(在docwiki術語中是「賦值兼容」)! –

相關問題