大家好,我在一本舊書,講述影像處理的,有以下一段原始碼出錯,如下:
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.
請問大家我應該如何修改這行碼,才能正常編譯和運行呢?
uj5u.com熱心網友回復:
var aScnLnBuffer: PAnsiChar;aScanLine: PByteArray;
........
for i := 0 to nMultiplier - 1 do
aScnLnBuffer[nOfs + i] := AnsiChar(aScanLine[nIdx + i]);
uj5u.com熱心網友回復:
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
uj5u.com熱心網友回復:
aScnLnBuffer: PChar;將這個PChar改成PAnsiChar應該就可以的
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/24119.html
