2013-05-02 108 views
5

标题中是否有这样的事情?我试图做到这一点的转换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; 

那些谁知道德尔福将看到明显的问题。你将如何解决这个问题?

回答

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; 

事实上,你可以清楚地reaplce由(按值)指针参数var参数。在TReaderModeInfo之前宣布PReaderModeInfo没有问题。

+0

谢谢!现在去实现! – Glenn1234 2013-05-02 17:49:27

+0

这是唯一的方法,我为这个确切场景搜索了一个解决方案。它只适用于你打算使用指针版本。 – 2013-05-02 21:49:14

+0

只需注意,如果在没有显式指针的情况下调用函数非常重要,应该可以将'prmi'变成一个无类型的'var'参数。你当然会失去类型安全,这就是为什么我不会自己做,但其他人可能,所以只是确保它在这里提到。 – hvd 2013-05-04 08:04:43