【发布时间】:2020-09-01 09:08:36
【问题描述】:
我不是一个 Delphi 程序员,我很乐意做 C++Builder 编程,delphi 不是我的语言。我有一些用 Delphi 编写的组件,它们在 10.3 中编译良好,但在 10.4 中确实出现错误,我可以看到问题的原因,但我不知道如何修复它。请帮我解决它。
procedure CopyInterlacedRGB8(const Pass: Byte; Src, Dest, Trans, Extra: pChar)
Dest^ := Char(fOwner.GammaTable[pByte(Longint(Src) + 2)^]); inc(Dest); // changed these two, but I have no clue what I'm doing lul
Dest^ := Char(fOwner.GammaTable[pByte(Longint(Src) + 1)^]); inc(Dest);
Byte(Dest^) := fOwner.GammaTable[pByte(Longint(Src) )^]; inc(Dest); // ERROR here
我在这里看到的方式,正如我在 C++ 中所理解的那样,有一个字节正在初始化,并且正在被分配。类似于 char('a') = 5;但是我可以看到代码最初想要做什么,将一些东西分配给Dest的地址。
我应该如何改变这些东西才能正常工作??
【问题讨论】:
-
你遇到了什么错误?
-
您忘记告诉我们您收到了什么错误。但是,
Dest是PChar,所以Dest^是Char。这是一个两字节的值,因此您不能将其转换为Byte。 -
除非您处理 16/48 位 RGB,否则所有这些变量都只想处理字节,而不是字。使用
PAnsiChar而不是PChar- 你的函数名称无论如何都表示8bit。 -
这段代码看起来有缺陷,即使你可以编译它。
Char在您引用的两个版本中都是两个字节宽。除了让代码编译之外,您可能还想让它工作! -
@AmigoJack OP 正在处理 RGB 字节数据。他们不应该使用
Char或PAnsiChar- 这些是字符和文本的字符串类型。Byte和TBytes将是合适的。没有以pChar为参数的明智解决方案,因此从根本上说,这种方法永远不会有用。如何为其设计替代品将取决于您所处的环境。选择合适的参数类型应该是第一步。
标签: delphi