मैं यह पता लगाने की कोशिश कर रहा हूं कि डेल्फी की बढ़ी हुई आरटीटीआई सुविधाओं के समान चीजें करने का कोई तरीका है या नहीं।फ्रीपास्कल आरटीटीआई। क्या विधि का आह्वान करने का कोई तरीका है?
जहां तक मुझे पता है कि एफपीसी आरटीटीआई फीचर्स प्रदान नहीं करता है जो डेल्फी 2010 से डेल्फी में दिखाई देता है। लेकिन मैं रनटाइम के दौरान कुछ चाल करने के लिए कुछ रास्ता ढूंढना चाहता हूं।
पांचवें वेतन आयोग में typinfo
इकाई का उपयोग मैं रूप में इस तरह कर सकते हैं:
- प्राप्त वस्तु प्रकाशित संपत्ति सूची -
typinfo
इकाई सेgetPropList
के माध्यम से; - ऑब्जेक्ट की प्रकाशित संपत्ति का मूल्य/सेट मान -
GetPropValue(...): Variant
/SetPropValue(...Value: Variant)
के माध्यम से; - प्रकाशित विधि प्राप्त करें -
MethodAddres
के माध्यम से;
लेकिन मैं जैसे कार्य करने के लिए एक रास्ता नहीं मिला है:
- कॉल तरीकों;
- कॉल कन्स्ट्रक्टर, या ऑब्जेक्ट्स बनाएं;
अद्यतन: कंस्ट्रक्टर्स के साथ समस्या यह बहुत तरीकों से एक की तरह है - मैं इसे में विभिन्न पैरामीटर पारित करने के लिए एक तरह से करना चाहते हैं:
// concept of code
type
TClass = class of TObject;
TMyClass1 = class
public
constructor Create(Param1: Integer; Param2: string); override;
end;
TMyClass2 = class
public
constructor Create(ObjectParam: Object); override;
end;
TParams = array of Variant;
var
Classes: array of TClass
Instances: array of Object;
ParamArray: array of TParams;
...
For I := 0 to Count-1 do
begin
LocalConstructor := @(Classes[I].Create);
Instances[I] := CallConstructor(LocalConstructor, ParamArray[I]);
end;
तो मैं उसके हस्ताक्षर जानने के बिना निर्माता कॉल करने के लिए की जरूरत है।
तो मेरी समस्या ऑब्जेक्ट की विधि को कॉल करना और कुछ पैरामीटर को पास करना है। यह function CallMethod(Instance: Object; MethodName: String; Params: array of Variant): Variant;
यदि मुझे गलत नहीं लगता है तो इसे डेल्फी के 2010+ आरटीटीआई के माध्यम से हल किया जा सकता है। लेकिन बढ़ाए गए डेल्फी के आरटीटीआई का उपयोग करने से पहले मैं समझना चाहता हूं कि यह एफपीसी में संभव है।
दूसरे शब्दों में मेरी वर्तमान समस्या नियमित रूप से तर्कों को पारित करती है। मैं जानता हूँ कि यह इस योजना का उपयोग किया जा सकता है:
type
TmyProc = procedure CallMe(x: byte);
...
var proc: TmyProc;
...
proc := pointerToFunc^;
proc(0);
लेकिन मैं (संकलन समय के दौरान) गिनती और मापदंडों के प्रकार जानने के बिना इसे लागू करने की जरूरत है।
विषय से संबंधित कुछ लिंक कर रहे हैं:
Delphi: Call a function whose name is stored in a string
http://www.swissdelphicenter.ch/torry/showcode.php?id=1745
दूसरे लेख (http://www.swissdelphicenter.ch/torry/showcode.php?id=1745) एक नियमित नाम से DLL से आयात करने के लिए तर्क पारित करने के लिए एक तरह से वर्णन करता है। लगभग मुझे लगता है कि मुझे लगता है कि मुझे लगता है। लेकिन मुझे यकीन नहीं है कि रास्ता विश्वसनीय है।
शायद कोई पुस्तकालय है, जो "पुरानी" टाइपिनोफ़ो इकाई (आरटीटीआई इकाई के बिना) का उपयोग करके इन चीजों को लागू करता है?
इसके अलावा मुझे कुछ प्रकार के सार्वभौमिक ईवेंट हैंडलर बनाने की प्रक्रिया में दिलचस्पी है - प्रक्रियाएं जो विभिन्न घटनाओं (पैरामीटर के विभिन्न सेटों के साथ) को असाइन की जा सकती हैं।:
procedure myEventHandler(params: array of variant);
...
Button.OnClick := myEventHandler;
Button.OnMouseMove := myEventHandler;
क्या यह संभव है? या कम से कम कुछ ऐसा ही है?