我正在安裝舊的組件包TSCap32,並通過Move
命令在多個位置獲取錯誤Invalid typecast
。德爾福:無效的移動類型轉換
var
pCopiedDib: PChar;
...
Move(pOrigDibBmi^, TByteArray(pCopiedDib^)[0], BmiSize);
單位本身聲明TByteArray像波紋管:
type
TByteArray = array[0..0] of Byte;
如何解決這個問題?
我正在安裝舊的組件包TSCap32,並通過Move
命令在多個位置獲取錯誤Invalid typecast
。德爾福:無效的移動類型轉換
var
pCopiedDib: PChar;
...
Move(pOrigDibBmi^, TByteArray(pCopiedDib^)[0], BmiSize);
單位本身聲明TByteArray像波紋管:
type
TByteArray = array[0..0] of Byte;
如何解決這個問題?
您正在使用的演員要求TByteArray
和pCopiedDib^
類型具有相同的大小。它們不是:TByteArray
的大小爲1,而pCopiedDib^
的大小爲2.因此編譯器會拒絕您的代碼,因爲它無效。
該代碼大概是最初爲Unicode編寫的Delphi編寫的,其中PChar
是PAnsiChar
的別名。在這種情況下代碼編譯。現在,您使用的是Unicode Delphi,PChar
是PWideChar
的別名,因此這些類型具有不同的大小。
確切地說如何解決你的代碼不清楚。如果你將pCopiedDib
定義爲PAnsiChar
,那麼你的代碼將會被編譯,但是否會起作用是另一回事。我建議你現在進一步研究這個代碼,以便知道錯誤的原因。
感謝您的unicode部分信息。 – SAMPro
什麼是'pOrigDibBmi'聲明爲?還有'PChar'? –
'PByteArray =^TByteArray; ...... PByteArray(pCopiedDib)^,'工作? –