我正在安装一个旧的组件包TSCap32并使用 Move 命令在多个位置获取错误 Invalid typecast .
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.因此编译器拒绝您的代码,因为它无效 .
TByteArray
pCopiedDib^
该代码可能最初是为Unicode前Delphi编写的,其中 PChar 是 PAnsiChar 的别名 . 在那种情况下,代码编译 . 现在,您使用Unicode Delphi并且 PChar 是 PWideChar 的别名,因此类型具有不同的大小 .
PChar
PAnsiChar
PWideChar
究竟如何修复您的代码尚不清楚 . 如果将 pCopiedDib 定义为 PAnsiChar ,那么您的代码将被编译,但是否它将起作用是另一回事 . 我建议您进一步研究此代码,因为您知道错误的原因 .
pCopiedDib
1 回答
您正在使用的强制转换要求
TByteArray
和pCopiedDib^
类型具有相同的大小 . 它们不是:TByteArray
的大小为1,pCopiedDib^
的大小为2.因此编译器拒绝您的代码,因为它无效 .该代码可能最初是为Unicode前Delphi编写的,其中
PChar
是PAnsiChar
的别名 . 在那种情况下,代码编译 . 现在,您使用Unicode Delphi并且PChar
是PWideChar
的别名,因此类型具有不同的大小 .究竟如何修复您的代码尚不清楚 . 如果将
pCopiedDib
定义为PAnsiChar
,那么您的代码将被编译,但是否它将起作用是另一回事 . 我建议您进一步研究此代码,因为您知道错误的原因 .