记录类型的前向声明

Gle*_*234 5 delphi types

标题中有这样的东西吗?我试图在转换API结构的过程中做到这一点,并遇到以前没有遇到的事情:

PFNReaderTranslatedDispatch = function(var msg: TMsg): BOOL; stdcall;
PFNReaderScroll = function(var prmi: TReaderModeInfo; dx, dy: integer): BOOL; stdcall;
TReaderModeInfo = record
  cbSize: DWord;
  hWnd: THandle;
  fFlags: DWord;
  prc: PRect;
  pfnScroll: PFNReaderScroll;
  fFlags2: PFNReaderTranslatedDispatch;
  lParam: DWord;
end;
PReaderModeInfo = ^TReaderModeInfo;
Run Code Online (Sandbox Code Playgroud)

知道Delphi的人会看到明显的问题.你会如何解决这个问题?

And*_*and 9

我认为这是最简单的解决方案:

PFNReaderTranslatedDispatch = function(var msg: TMsg): BOOL; stdcall;
PReaderModeInfo = ^TReaderModeInfo;
PFNReaderScroll = function(prmi: PReaderModeInfo; dx, dy: integer): BOOL; stdcall;
TReaderModeInfo = record
  cbSize: DWord;
  hWnd: THandle;
  fFlags: DWord;
  prc: PRect;
  pfnScroll: PFNReaderScroll;
  fFlags2: PFNReaderTranslatedDispatch;
  lParam: DWord;
end;
Run Code Online (Sandbox Code Playgroud)

实际上,您可以var通过(按值)指针参数清楚地获取参数.并且PReaderModeInfo之前没有问题TReaderModeInfo.