Delphi:使用Move进行无效的类型转换

时间:2015-07-06 09:43:05

标签: delphi delphi-xe2

我正在安装一个旧的组件包TSCap32,并使用Invalid typecast命令在多个位置获取错误Move

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

单位本身宣告TByteArray如下:

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

如何解决此错误?

1 个答案:

答案 0 :(得分:2)

您使用的演员表要求TByteArraypCopiedDib^类型具有相同的尺寸。它们不是:TByteArray的大小为1,而pCopiedDib^的大小为2.因此编译器拒绝您的代码,因为它无效。

该代码可能最初是为Unicode前Delphi编写的,其中PCharPAnsiChar的别名。在那种情况下,代码编译。现在,您使用Unicode Delphi,PCharPWideChar的别名,因此类型具有不同的大小。

究竟如何修复代码尚不清楚。如果您将pCopiedDib定义为PAnsiChar,那么您的代码将会编译,但无论它是否有效都是另一回事。我建议你进一步研究这段代码,因为你知道错误的原因。