gpt4 book ai didi

delphi - 帕斯卡对象 : how to do a typed forward declaration?

转载 作者:行者123 更新时间:2023-12-01 17:02:33 25 4
gpt4 key购买 nike

我正在将很棒的 fmod C header 翻译为 Pascal,但由于前向声明而陷入困境。如果我在类型之前声明函数,则错误为“FMOD_CODEC_STATE:未知”,如果我在函数之前声明FMOD_CODEC_STATE,则错误为“FMOD_CODEC_METADATACALLBACK:未知”知道我该如何解决这个问题吗?非常感谢!

type
FMOD_CODEC_STATE = Record
numsubsounds: Integer;
waveformat: array[0..0] of FMOD_CODEC_WAVEFORMAT;
plugindata: Pointer;

filehandle: Pointer;
filesize: Cardinal;
fileread: FMOD_FILE_READCALLBACK;
fileseek: FMOD_FILE_SEEKCALLBACK;
metadata: FMOD_CODEC_METADATACALLBACK;
end;
FMOD_CODEC_METADATACALLBACK = function (codec_state: FMOD_CODEC_STATE; tagtype: FMOD_TAGTYPE; name: PChar; data: Pointer; datalen: Cardinal; datatype: FMOD_TAGDATATYPE; unique: Integer):FMOD_RESULT;

最佳答案

记录不需要按值传递。事实上,原始的 C 代码无论如何都不会按值传递它。它是通过引用传递的,带有指针。声明指针,然后声明函数,然后声明记录:

type
PFMOD_CODEC_STATE = ^FMOD_CODEC_STATE;
FMOD_CODEC_METADATACALLBACK = function (codec_state: PFMOD_CODEC_STATE; tagtype: FMOD_TAGTYPE; name: PChar; data: Pointer; datalen: Cardinal; datatype: FMOD_TAGDATATYPE; unique: Integer):FMOD_RESULT;
FMOD_CODEC_STATE = Record
numsubsounds: Integer;
waveformat: PFMOD_CODEC_WAVEFORMAT;
plugindata: Pointer;

filehandle: Pointer;
filesize: Cardinal;
fileread: FMOD_FILE_READCALLBACK;
fileseek: FMOD_FILE_SEEKCALLBACK;
metadata: FMOD_CODEC_METADATACALLBACK;
end;

是的,您可以在声明指向某个对象的指针之前声明它所指向的对象。但是,您不允许前向声明记录,因此上面给出的顺序是这三个声明的唯一可能的顺序。

关于delphi - 帕斯卡对象 : how to do a typed forward declaration?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6018510/

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