Запись не нужно передавать по значению.Фактически, оригинальный 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;
Да, вам разрешено объявить указатель на что-то, прежде чем вы объявите то, на что оно указывает.Тем не менее, вы не имеете права пересылать и объявлять записи, поэтому приведенный выше порядок является единственным возможным порядком для этих трех объявлений.