delphi - डेल्फी में इंटरफ़ेस प्रकार डेटा से ट्रिड की एक निश्चित श्रेणी की शुरुआत कैसे करें?




interface guid (5)

मैं इस तरह एक सरणी शुरू करना चाहता हूँ -

Const MyArray : Array[0..0] Of TGUID = (IInterface);

लेकिन इसका परिणाम -

[DCC Error] Test.pas(10): E2010 Incompatible types: 'TGUID' and 'string'

तो यह देखने के लिए कि मैं क्या करने की कोशिश की -

Const MyArray : Array[0..0] Of String = (IInterface);

इसमें कौन सा परिणाम है!

[DCC Error] Test.pas(10): E2010 Incompatible types: 'string' and 'TGUID'

कितना अजीब है! निश्चित रूप से IInterface एक या दूसरे है, लेकिन यह हठीले से गलत प्रकार में रूपांतरित हो रहा है।


आप IInterface की एक सरणी बना सकते हैं।


आप इंटरफ़ेस घोषणाओं से GUID खींच सकते हैं और उन्हें (स्ट्रिंग) स्थिरांक के रूप में घोषित कर सकते हैं। तब आप इन स्थिरांकों को आपके इंटरफ़ेस घोषणाओं में और आपके सरणी निरंतर घोषणाओं में उपयोग कर सकते हैं। कंपाइलर मान्य GUID स्ट्रिंग स्वीकार करता है जहां TGUID की अपेक्षा होती है। अमान्य स्ट्रिंग परिणाम E2204 में "अनुचित GUID वाक्यविन्यास" संकलन त्रुटि

const
  MyGuid1 = '{99BDAB12-B1B6-41B0-9BF1-2C1DB3D8EC70}';
  MyGuid2 = '{8C7CD303-8D81-469B-99ED-E1F163E9036F}';

type
  IMyInterface1 = interface
    [MyGuid1]
  end;

  IMyInterface2 = interface
    [MyGuid2]
  end;

const
  MyArray: array[0..1] of TGUID = (MyGuid1, MyGuid2);

यदि आप किसी कॉन्स्टएर्म सरणी का उपयोग करते हैं तो आपको इसे इस तरह से const मूल्यों के साथ सेट करना होगा:

const GuidArray: array[0..0] of TGuid=
  ('{84DBCC66-72AA-4806-AE28-B55FC5B83FC8}');

एक और विचार: निम्नलिखित संकलन:

procedure Blah(const MyArray: array of TGUID);
begin
  //...
end;

Blah([IInterface, IDispatch]);

शायद आप इस दृष्टिकोण का उपयोग कर सकते हैं


आप GUID के अपने सरणी को वापस करने के लिए एक फ़ंक्शन लिख सकते हैं। (मैं निरंतर तिथि मानों के लिए इस तकनीक का उपयोग करता हूं।)

  • यह "वास्तव में" एक स्थिर नहीं है, लेकिन आप जहां भी सामान्यतः निरंतर उपयोग करेंगे I
  • लेकिन इसे "असाइन किया गया टाइप कंटेंट्स" विकल्प का उपयोग करके भी संशोधित नहीं किया जा सकता है धोखाधड़ी की अनुमति नहीं है :)
  • इसलिए इनिशियलाइज़ेशन सेक्शन में ग्लोबल सेट करने पर इसका एक छोटा सा लाभ है।
  • साथ ही, इंटरफेस द्वारा अपने स्वयं के स्थिरों में उपयोग किए जाने वाले GUID को ले जाने की तुलना में यह कम मैनुअल काम है।

आपके पास एक गतिशील या निश्चित आकार की सरणी लौटने का विकल्प है।

विकल्प 1

type
  TGUIDArray = array of TGUID;

function GetMyInterfaces: TGUIDArray;
begin
  SetLength(Result, 2);
  Result[0] := IMyInterface1;
  Result[1] := IMyInterface2;
end;

विकल्प 2

type
  TGUIDArray = array[0..1] of TGUID;

function GetMyInterfaces: TGUIDArray;
begin
  Result[0] := IMyInterface1;
  Result[1] := IMyInterface2;
end;




array-initialize