2015-07-06 61 views
-2

我正在安裝舊的組件包TSCap32,並通過Move命令在多個位置獲取錯誤Invalid typecast德爾福:無效的移動類型轉換

var 
    pCopiedDib: PChar; 
... 
Move(pOrigDibBmi^, TByteArray(pCopiedDib^)[0], BmiSize); 

單位本身聲明TByteArray像波紋管:

type 
    TByteArray = array[0..0] of Byte; 

如何解決這個問題?

+0

什麼是'pOrigDibBmi'聲明爲?還有'PChar'? –

+0

'PByteArray =^TByteArray; ...... PByteArray(pCopiedDib)^,'工作? –

回答

2

您正在使用的演員要求TByteArraypCopiedDib^類型具有相同的大小。它們不是:TByteArray的大小爲1,而pCopiedDib^的大小爲2.因此編譯器會拒絕您的代碼,因爲它無效。

該代碼大概是最初爲Unicode編寫的Delphi編寫的,其中PCharPAnsiChar的別名。在這種情況下代碼編譯。現在,您使用的是Unicode Delphi,PCharPWideChar的別名,因此這些類型具有不同的大小。

確切地說如何解決你的代碼不清楚。如果你將pCopiedDib定義爲PAnsiChar,那麼你的代碼將會被編譯,但是否會起作用是另一回事。我建議你現在進一步研究這個代碼,以便知道錯誤的原因。

+0

感謝您的unicode部分信息。 – SAMPro