首页 文章

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

提问于
浏览
-2

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

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

该单位本身宣称TByteArray如下:

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

如何解决此错误?

1 回答

  • 2

    您正在使用的强制转换要求 TByteArraypCopiedDib^ 类型具有相同的大小 . 它们不是: TByteArray 的大小为1, pCopiedDib^ 的大小为2.因此编译器拒绝您的代码,因为它无效 .

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

    究竟如何修复您的代码尚不清楚 . 如果将 pCopiedDib 定义为 PAnsiChar ,那么您的代码将被编译,但是否它将起作用是另一回事 . 我建议您进一步研究此代码,因为您知道错误的原因 .

相关问题