gpt4 book ai didi

delphi - 4 字符字符串文字和 FourCC(又名 OSType)值能否和平相处?

转载 作者:行者123 更新时间:2023-12-03 15:06:16 24 4
gpt4 key购买 nike

我正在使用 RIFFCHUNK 结构,声明(在“外部”模块中)为(引用 MMSystemDirectShow9):

  type FOURCC = DWORD;                    { a four character code }

type _riffchunk = record
fcc: FOURCC;
cb: DWORD;
end;
type RIFFCHUNK = _riffchunk;

我特别感兴趣的是 fcc 字段,其类型解析为 LongWord。另一方面,fcc 的有意义值是由 4 个 ASCII 可打印单字节字符组成的字符串。我想避免以下丑陋的情况(引用 MMSystem):

  const FOURCC_RIFF = $46464952;   { 'RIFF' }

...并使用实际的、不言自明的四个字符串文字进行赋值和比较。

到目前为止我尝试过什么但遇到了困难,如下所示:

const idRIFF: packed array [1..4] of AnsiChar = 'RIFF';
var Chunk: RIFFCHUNK;
begin
Chunk.fcc := FOURCC(idRIFF); { works, but requires a typecast in implementation }

由于 idRIFF 不是真正的常量,因此它不能用于声明正确类型的符号。

那么,我想请教一下,在这个美化事件中应该在哪里进一步发展?

请注意 FOURCC 类型是“外部”类型,因此我不能将其重新声明为字符数组。

最佳答案

此声明将使用字符串文字将 FOURCC_RIFF 视为常量:

const
FOURCC_RIFF_S : array[0..SizeOf(FOURCC)-1] of AnsiChar = 'RIFF';
var
FOURCC_RIFF : FOURCC absolute FOURCC_RIFF_S;

如果可写常量指令打开,也可以通过捕获编译器指令来修复。

{$IFOPT J+}
{$DEFINE UNDO_WRCONST}
{$J-}
{$ENDIF}
const
FOURCC_RIFF_S : array[0..SizeOf(FOURCC)-1] of AnsiChar = 'RIFF';
var
FOURCC_RIFF : FOURCC absolute FOURCC_RIFF_S;
{$IFDEF UNDO_WRCONST}
{$J+}
{$ENDIF}

无需类型转换,编译器会将值视为真正的常量。

var
Chunk: RIFFCHUNK;
...
Chunk.fcc := FOURCC_RIFF;

关于delphi - 4 字符字符串文字和 FourCC(又名 OSType)值能否和平相处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302263/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com