如何转换 PByteArray -> PChar ?

Man Wong 2019-02-13 08:39:58
大家好,我在一本旧书,讲述图像处理的,有以下一段源码出错,如下:

procedure TForm1.RotateMethod2(aBitmap: TBitmap);
var aScnLnBuffer: PChar;
aScanLine: PByteArray;
........
for i := 0 to nMultiplier - 1 do
Byte(aScnLnBuffer[nOfs + i]) := aScanLine[nIdx + i];

1) 首先,最初的源码已经出了问题

Byte(aScnLnBuffer[nOfs + i]) := aScanLine[nIdx + i];

Compile 也出错误 E2064 Left side cannot be assigned to

左边这个 Byte( ) 应该是错的吧? 应该是将右边 aScanLine 的值转换去 aScnLnBuffer !!!

2) 因此我重写
aScnLnBuffer[nOfs + i]) := pChar(aScanLine[nIdx + i]);

但是却得到错误信息
E2010 Incompatible types: 'Char' and 'PwideChar'

我在网上得知,原来 Delphi 在 2007 前的 pChar,2009后的 pChar 都改变了用法的。

In Delphi 2007 and earlier, PChar is an alias for PAnsiChar. In Delphi 2009 and later, PChar is an alias for PWideChar.
The PChar is an alias of PAnsiChar in Delphi 6 and stands for a PWideChar in Delphi XE8.

请问大家我应该如何修改这行码,才能正常编译和运行呢?
...全文
249 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
citGenny 2019-08-11
  • 打赏
  • 举报
回复
aScnLnBuffer: PChar; 将这个PChar改成PAnsiChar应该就可以的
doloopcn 2019-02-13
  • 打赏
  • 举报
回复
In Delphi 2007 and earlier, PChar is an alias for PAnsiChar. In Delphi 2009 and later, PChar is an alias for PWideChar.
The PChar is an alias of PAnsiChar in Delphi 6 and stands for a PWideChar in Delphi XE8.

兼容旧版的话应该把PChar改为PAnsiChar
在XE8中把所有的PChar改为PAnsiChar
  • 打赏
  • 举报
回复
var aScnLnBuffer: PAnsiChar;
aScanLine: PByteArray;
........
for i := 0 to nMultiplier - 1 do
aScnLnBuffer[nOfs + i] := AnsiChar(aScanLine[nIdx + i]);

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi GAME,图形处理/多媒体
社区管理员
  • GAME,图形处理/多媒体社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧