2013-05-02 8 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; 

दरअसल, आप स्पष्ट रूप से एक (दर-मूल्य) सूचक पैरामीटर द्वारा एक var पैरामीटर reaplce कर सकते हैं। और TReaderModeInfo से पहले PReaderModeInfo घोषित करने में कोई समस्या नहीं है।

+0

धन्यवाद! अब लागू करने के लिए! – Glenn1234

+0

यह एकमात्र तरीका है, मैंने इस सटीक परिदृश्य के लिए एक बार समाधान की खोज की। और यह केवल तब लागू होता है जब आप सूचक संस्करण का उपयोग करना चाहते हैं। –

+0

बस एक नोट, एक स्पष्ट सूचक के बिना फ़ंक्शन को कॉल करना महत्वपूर्ण है, तो 'prmi' को एक untyped 'var' पैरामीटर भी बनाना संभव होना चाहिए। आप निश्चित रूप से प्रकार की सुरक्षा खो देते हैं, यही कारण है कि मैं इसे स्वयं नहीं करूँगा, लेकिन अन्य शायद, यह सुनिश्चित कर लें कि इसका उल्लेख यहां किया गया है। – hvd

संबंधित मुद्दे