记录类型的前向声明
问题描述:
标题中是否有这样的事情?我试图做到这一点的转换an API structure的一部分,并运行到的东西之前,我还没有遇到过:记录类型的前向声明
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;
那些谁知道德尔福将看到明显的问题。你将如何解决这个问题?
答
我觉得这是最简单的解决方案:
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;
事实上,你可以清楚地reaplce由(按值)指针参数var
参数。在TReaderModeInfo
之前宣布PReaderModeInfo
没有问题。
谢谢!现在去实现! – Glenn1234 2013-05-02 17:49:27
这是唯一的方法,我为这个确切场景搜索了一个解决方案。它只适用于你打算使用指针版本。 – 2013-05-02 21:49:14
只需注意,如果在没有显式指针的情况下调用函数非常重要,应该可以将'prmi'变成一个无类型的'var'参数。你当然会失去类型安全,这就是为什么我不会自己做,但其他人可能,所以只是确保它在这里提到。 – hvd 2013-05-04 08:04:43