Oli*_*ons 2 delphi pascal object
我正在将伟大的fmod C标题翻译成Pascal,而且因为前向声明而被卡住了.如果我在类型之前声明了该函数,则错误为"FMOD_CODEC_STATE:unknown",如果我在函数之前声明FMOD_CODEC_STATE ,则错误为"FMOD_CODEC_METADATACALLBACK:unknown"我是否知道如何解决此问题?非常感谢你 !
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;
Run Code Online (Sandbox Code Playgroud)
记录不需要按值传递.实际上,原始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;
Run Code Online (Sandbox Code Playgroud)
是的,你可以在声明它所指向的东西之前声明指向某个东西的指针.但是,您不能转发声明记录,因此上面给出的顺序是这三个声明的唯一可能顺序.
| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |