函數InvalidateRect(hWnd:HWND; const lpRect:TRect; bErase:BOOL):BOOL;什麼時候Windows.InvalidateRect過載
函數InvalidateRect(hWnd:HWND; lpRect:PRect; bErase:BOOL):BOOL;
在XE2的Windows單元中有兩個重載的定義。在某些情況下,這需要比以前的Delphi版本更特殊的處理,只有後者纔有聲明。
問題是:哪個Delphi版本第一次引入了這個重載?
函數InvalidateRect(hWnd:HWND; const lpRect:TRect; bErase:BOOL):BOOL;什麼時候Windows.InvalidateRect過載
函數InvalidateRect(hWnd:HWND; lpRect:PRect; bErase:BOOL):BOOL;
在XE2的Windows單元中有兩個重載的定義。在某些情況下,這需要比以前的Delphi版本更特殊的處理,只有後者纔有聲明。
問題是:哪個Delphi版本第一次引入了這個重載?
下InvalidateRect
函數重載:
function InvalidateRect(hWnd: HWND; const lpRect: TRect; bErase: BOOL): BOOL;
已在2009年德爾福引入雖然,你並不需要做的任何條件函數調用,當你調用函數(過載)與以下(正確)原型:
function InvalidateRect(hWnd: HWND; lpRect: PRect; bErase: BOOL): BOOL;
這應該存在於所有版本的德爾福(至少那些,與最小的Windows 2k支持)。
好找。 ;)我同意:如果你正在編寫D2009 +的代碼,你可以使用類似Delphi的'new'聲明來隱藏指針,但只要你的代碼需要在舊版本中工作,我認爲你最好使用那一個,而不是使用定義在它們之間切換。 – GolezTrol
問題在於另一個庫聲明瞭兩個變體,可能旨在幫助使較舊的Delphi與較新的Delphi進行源代碼兼容。然而,在較新的Delphi中,當兩個單元(Windows和這個lib)被「使用」時,它們都聲明相同的「重載」函數 - 除非函數完全符合單元名稱,否則會出現「模糊調用」。後者在某種程度上背離了源代碼級別兼容性的想法 –
@GolezTrol對我來說,新的聲明不僅僅因爲它類似於Pascal--而且因爲它是類型安全的。 OTOH我最好只看到Delphi執行了默認的「$ T +」設置,而不是保持Pascal愚蠢的「指針是無類型的」傳統。該死的! '數組'和'TArray
在這種情況下,這*需要特殊處理*?只是總是使用第二次重載,你會沒事的。 – TLama
D2007只有第二個版本,所以之後就是這樣。不知道爲什麼它很重要,但;正如@TLama所說,如果你只是使用那個,你就沒有問題。 –
所以它在德爾福2009年引入...有提到的超負荷。 – TLama