2010-12-02 20 views
5

मैं डेल्फी 3 में लिखे गए एक एप्लिकेशन का समर्थन करता हूं और मैं इसे डेल्फी के एक नए संस्करण में अपग्रेड करने का अवसर इंतजार करते समय स्रोत कोड में कुछ सुधार करना चाहता हूं। उन चीजों में से एक जो मैं उपयोग करना चाहता हूं इंटरफेस है। मैं जानता हूँ कि डेल्फी 3 पहले से ही इंटरफेस की अवधारणा है, लेकिन मैं मुसीबत जानने कैसेइंटरफेस के लिए समर्थन के डेल्फी 3 में समतुल्य क्या है?

if Supports(ObjectInstance, IMyInterface) then 
+3

thats आवरण IUnknown.QueryInterface http://msdn.microsoft.com/en- हमें/लाइब्रेरी/ms682521 (VS.85) .aspx –

उत्तर

5

के बराबर करने के लिए "समर्थन" समारोह का अपना स्वयं का कार्यान्वयन लिखें हो रहा है। डेल्फी 2009 में आप उपयोग कर सकते

function MySupports(const Instance: TObject; const IID: TGUID): Boolean; 
var 
    Temp: IInterface; 
    LUnknown: IUnknown; 
begin 
    Result:= (Instance <> nil) and 
      ((Instance.GetInterface(IUnknown, LUnknown) 
      and (LUnknown.QueryInterface(IID, Temp) = 0)) or 
      Instance.GetInterface(IID, Temp)); 
end; 

टेस्ट:

procedure TForm4.Button3Click(Sender: TObject); 
var 
    Obj: TInterfacedObject; 

begin 
    Obj:= TInterfacedObject.Create; 
    if MySupports(Obj, IUnknown) then 
    ShowMessage('!!'); 
end; 

आशा है कि यह काम करेगा डेल्फी में 3

के लिए
+5

इसे कॉल करने के लिए भी बेहतर है समर्थन करता है और फिर जब आप आगे बढ़ते हैं तो आपको घोषणा को हटाने की आवश्यकता होती है और सभी कॉलिंग कोड वही रह सकते हैं। –