Monday, April 29, 2024

विजुअल बेसिक कम्पोनेण्ट ऑब्जेक्ट पार्ट-3 | Visual Basic Component Object – Best Info

Table of Contents

विजुअल बेसिक कम्पोनेण्ट ऑब्जेक्ट के कार्य – कॉम, कॉम+, डॉट नेट तथा ओ.एल.ई. | COM, COM+, .NET and OLE

विजुअल बेसिक कम्पोनेण्ट ऑब्जेक्ट – कॉम, कॉम+, डॉट नेट तथा ओ.एल.ई.परिचय (Introduction) – इस आर्टिकल को पढ़ने के बाद आप यदि पहले से विजुअल बेसिक प्रोग्रामर है तो यह जान जायेंगे कि विजुअल बेसिक में किया गया कोड संग्रह व्यर्थ नहीं जाने वाला है। इस लेख में कम्पोनेण्ट ऑब्जेक्ट मॉडल, कॉम+, डॉट नेट, ओ.एल.ई को विस्तार से रोचकपूर्वक समझाया गया है।

इस पार्ट में हम जानेंगे – TLBIMP के साथ मेटाडाटा को बदलना (Converting Metadata with TLBIMP), कॉम कम्पोनेन्ट्स का सीधे-सीधे उपयोग करना (Using COM Components Directly), TLBIMP तथा डायरेक्ट रेफ्रेन्स के बीच का चयन करना, कॉम को डॉट नेट से कॉल करना (Calling COM from .NET), कॉम कम्पोनेण्ट को इंस्टॉल करना (Installing the COM Component), TLBimp का उपयोग कर असेम्बली बनाना (Creating an Assembly using TLBIMP), परीक्षण प्रोजेक्ट को बनाना (Creating the Test Project) के बारे में

TLBIMP के साथ मेटाडाटा को बदलना (Converting Metadata with TLBIMP)

निस्संदेह डॉट नेट पब्लिक इंटरफेसेस को वर्णन करने के लिए मेटाडाटा का उपयोग करने वाला पहला नहीं है। वास्तव में, कॉम टाइप लायब्रेरी में कॉम कम्पोनेन्ट्स को पब्लिक इंटरफेस का वर्णन करने के लिए मेटाडाटा रखते हैं। आर. सी. डब्ल्यू का कार्य इस कॉम मेटाडाटा को डॉट नेट मेटाडाटा में बदलने का है। इस रूपान्तरण को सम्पन्न करने का एक टूल है जो tlbimp (type library importer) कहा जाता है तथा यह डॉट नेट फ्रेमवर्क सॉफ्टवेयर डेवलपमेन्ट किट के एक भाग के रूप में प्रदान किया जाता है। Tlbimp कॉम टाइप लायब्रेरी से मेटाडाटा पढ़ता है तथा कॉम कम्पोनेण्ट को कॉल करने के लिए मिलता-जुलता एक CLR असेम्बली बनाता है।

नोट : यदि आप विजुअल बेसिक के साथ ActiveX DLL या ActiveX Exe बनाते हैं, तब टाइप लायब्रेरी DLL या exe फाइल के अंदर इम्बेड होता है।

tlbimp एक कमाण्ड लाइन टूल है, जिसमें क्रिप्टोग्राफी की के साथ रिज़ल्टिंग असेम्बली को साइन करना, या टाइप लायब्रेरी में बाहरी रेफ्रेन्स को रिसॉल्व करने जैसे वस्तुओं के लिए कई विकल्प हैं। इसके सभी विकल्पों को देखने के लिए tlbimp/ ? कमाण्ड प्रॉम्प्ट पर टाइप करें। इसका सबसे महत्त्वपूर्ण विकल्प /out है, जिसकी सहायता से आप रिज़ल्टिंग डॉट नेट असेम्बली के लिए नाम स्पष्ट करते हैं। उदाहरण के लिए, support.dll नामक विजुअल बेसिक ActiveX DLL को NET Support.dll नामक एक मिलते-जुलते डॉट नेट असेम्बली में बदलने के लिए आप इस कमाण्ड लाइन का प्रयोग कर सकते हैं।
tlbimp Support.dll                      /out : NETsupport.dll

यह भी देखें :  डिजाइनरों के लिए सबसे अच्छा लैपटॉप कौन सा है ? | What Are The Best Laptops For Designers?

कॉम कम्पोनेन्ट्स का सीधे-सीधे उपयोग करना (Using COM Components Directly)

विजुअल बेसिक डॉट नेट विकासकर्त्ता के रूप में आपके पास कॉम कम्पोनेन्टस सीधे-सीधे उपयोग करने का विकल्प उपलब्ध होता है। कम से कम यह इस तरह दिखता तो है कि आप प्रोग्राम कर रहे हैं, फिर भी अनमैनेज्ड कोड के ऑब्जेक्ट को प्राप्त करने के लिए रनटाइम कॉलेबल रैपर्स (Runtime Callable Wrappers) का उपयोग कर रहे हैं। यदि आप किसी विजुअल बेसिक डॉट नेट प्रोजेक्ट पर कार्य कर रहे हैं तथा कॉम कम्पोनेन्ट्स का रेफ्रेन्स जोड़ना चाहते हैं तो निम्न पदों का अनुसरण करें –

  1. Project को क्लिक करें तथा Add Reference का चयन करें। 
  2. Add Reference डायलॉग बॉक्स में COM टैब का चयन करें।
  3. उस टाइप लायब्रेरी का चयन करें जो आप लिस्ट में से चाहते हैं तथा Select का चयन करें, या Browse बटन को क्लिक करें तथा उस कम्पोनेण्ट को लोकेट करें, जो सूचि में नहीं है। चयनित कम्पोनेण्ट्स डायलॉग बॉक्स में जुड़ जायेगा।
  4. OK को क्लिक कर अपने विजुअल बेसिक डॉट नेट प्रोजेक्ट में चयनित टाइप लायब्रेरी के लिए रनटाइम कॉलेबल रैपर का निर्माण करें।

जब आप ऐसा करते हैं तो आप देखेंगे कि विजुअल बेसिक डॉट नेट आपके प्रोजेक्ट के /bin फोल्डर में एक dil बनाता है जिसका नाम मूल कॉम कम्पोनेण्ट के नाम से लिया गया है। उदाहरण के लिए, यदि इस विधि से BackEnd.dil संस्करण 2.0 का रेफ्रेन्स लेते हैं तो विजुअल बेसिक डॉट नेट Interop. BackEnd_2_0.d11 फाइल में आर.सी.डब्ल्यू, (RCW) बनाता है।

कॉम कम्पोनेण्ट को सीधे-सीधे उपयोग में लाने के इस शॉट कट विधि की सबसे बड़ी कमी यह है कि रिजस्टिंग कोड को साइन करने का कोई उपाय नहीं है। परिणामस्वरूप, आप ग्लोबल असेम्बली कैश (Global Assembly Cache) में कोड को नहीं रख सकते हैं, जो एक से अधिक डॉट नेट एप्लिकेशनों के द्वारा इस कम्पोनेण्ट को शेअर करना असम्भव बनाता है।

विजुअल बेसिक कम्पोनेण्ट ऑब्जेक्ट के उपयोग – कॉम, कॉम+, डॉट नेट तथा ओ.एल.ई. | COM, COM+, .NET and OLE

विजुअल बेसिक कम्पोनेण्ट ऑब्जेक्ट के कार्य - कॉम, कॉम+, डॉट नेट तथा ओ.एल.ई. | COM, COM+, .NET and OLE
विजुअल बेसिक कम्पोनेण्ट ऑब्जेक्ट के कार्य – कॉम, कॉम+, डॉट नेट तथा ओ.एल.ई. | COM, COM+, .NET and OLE

TLBIMP तथा डायरेक्ट रेफ्रेन्स के बीच का चयन करना (Choosing between TLBIMP and Direct Reference)

यद्यपि डॉट नेट कोड कॉम कम्पोनेण्ट को कॉल करने हेतु दोनों ही विधि के उपयोग को मान्यता देता है, परन्तु दोनों ही के चयन का अपना कारण है –

  1. कॉम कम्पोनेण्ट के लिए जो केवल एक विजुअल बेसिक डॉट नेट प्रोजेक्ट के द्वारा उपयोग किया जायेगा तथा जिसे आपने स्वयं लिखा है, कोई अतिरिक्त कार्य करने के बजाय सीधा रेफ्रेन्स (direct reference) का उपयोग करता है। यह मेथड एक पूरी तरह प्राइवेट कम्पोनेण्ट के लिए ही उपयुक्त है, जिसे शेअर होने की आवश्यकता नहीं है।
  2. यदि एक कॉम कम्पोनेण्ट कई प्रोजेक्ट के द्वारा शेयर किया जाता है तो tlbimp का उपयोग करें ताकि आप रिजल्टिंग असेम्बली (resulting assembly) को साइन कर इसे ग्लोबल असेम्बली कैश (Global Assembly Cache) में रख सकें। शेयर्ड कोड का साइन होना आवश्यक है। इस मेथड की सहायता से आप आर. सी. डब्ल्यू. (RCW) को एक विशेष नाम के साथ एक विशेष लोकेशन में रख सकते हैं।
  3. यदि आप बनाये गये असेम्बली के उन्नत विवरण यथा नेमस्पेस या संस्करण संख्या (version number) को कंट्रोल करना चाहते हैं, तो आपको tlbimp का ही उपयोग करना चाहिए। डायरेक्ट रेफ्रेन्स इन विवरण पर कोई निमंत्रण नहीं देता है।
  4. यदि आपने इन दोनों में से किसी भी विधि से कॉम कम्पोनेण्ट नहीं लिखा है तो भी यह स्वीकार्य है। क्योंकि आपको किसी अन्य विकासकर्त्ता के द्वारा लिखा गया कोड साइन करने की अनुमति नहीं होती है। इस स्थिति में केवल आपको उस वास्तविक डेवलपर से प्राइमरी इंटरऑप असेम्बली (Primary Interop Assembly) प्राप्त करना होता है।
यह भी देखें :  विजुअल बेसिक में टेक्स्ट बॉक्स कंट्रोल | GUI Programming with Windows Forms (Part-2) - Best Info

कॉम को डॉट नेट से कॉल करना (Calling COM from .NET)

इस उदाहरण में आप प्रॉपर्टी, मेथड तथा इवेण्ट का उपयोग डॉट नेट कोड से कॉम कम्पोनेण्ट में करेंगे। आप tlbimp का उपयोग कॉम कम्पोनेण्ट इंटरफेस को असेम्बली में परिवर्तित करने करेंगे तथा फिर देखेंगे कि कैसे मैनेज्ड कोड के अंदर से किसी अन्य डॉट नेट कम्पोनेण्ट की तरह व्यवहार कर सकते हैं। इसको जब आप कर चुके होंगे, तब आप यह भी देखेंगे कि विजुअल बेसिक डॉट नेट प्रोजेक्ट से बगैर tlbimp का उपयोग किये हुए कॉम कम्पोनेण्ट का उपयोग सीधे-सीधे कर शॉट कट लेते हैं।

कॉम कम्पोनेण्ट को इंस्टॉल करना (Installing the COM Component)

इस उदाहरण में जिस कॉम कम्पोनेण्ट का उपयोग करेंगे, उसका नाम PhyServer.dll है। यह ActiveX.dll है जिसमें Temperature नाम का एक ही क्लास है। यह क्लास तापमान को व्यक्त करने के लिए एक आंतरिक वेरियेबल स्टोर करता है तथा सेल्सियस और फॉरेनहाइट के मध्य रूपांतरण करता है। (Temperature इंटरफेस के सदस्य सारणी –

सदस्यटाइपविवरण
Celsiusप्रॉपर्टीसेल्सियस में वर्तमान तापमान
Fahrenheitप्रॉपर्टीफॉरेनहाइट में वर्तमान तापमान
GetCelsiusमेथडवर्तमान तापमान को सेल्सियस से प्राप्त करते हैं।
GetFahrenheitमेथडवर्तमान तापमान को फॉरनहाइट में प्राप्त करता है।
Below Freezingइवेण्टतापमान के फ्रिजिंग प्वाइण्ट के नीचे सेट पर घटित होता है।
AboveBoilingइवेण्टतापमान के ब्वाइलिंग प्वाइण्ट के ऊपर सेट होने पर घटित होता है।

इस कॉम कम्पोनेण्ट को बनाने के लिए आपके कम्प्यूटर पर विजुअल बेसिक 6.0 इंस्टॉल होना चाहिए।

  • विजुअल बेसिक 6.0 को खोलें तथा एक नया ActiveX DLL प्रोजेक्ट बनाएँ।
  • Project Explorer विण्डो में Class1 मॉडयूल को क्लिक करें तथा Properties विण्डो का उपयोग कर उस क्लास का नाम Temperature बदलें।
  • Project Explorer विण्डो में Project1 को क्लिक करें तथा Properties विण्डो का उपयोग कर प्रोजेक्ट के नाम को बदलकर PhysServer करें।
  • Temperature क्लास में इस कोड को जोड़ें।
    Option Explicit
    Private mdblCelsius As Double
    Private mdblFahrenheit As Double
    Public Event BelowFreezing()
    Public Event AboveBoiling()
    Public Property Get Celsius() As Double
    Celsius = mdblCelsius
    End Property
    Public Property Let Celsius (NewTemperature As Double)
    mdblCelsius = New Temperature
    mdblFahrenheit = ( (NewTemperature * 9) /5) +32
    If mdblCelsius < 0 Then
    RaiseEvnt BelowFreezing
    End If
    If mdblCelsius > 100 Then
    RaiseEventAboveBoiling
    End If
    End Property
    Public Property Get Fahrenheit() As Double
    Fahrenheit = mdblFahrenheit
    End Property
    Public Property Let Fahrenheit(NewTemperature As Double)
    mdblFahrenheit = New Temprature
    mdblCelsius = ((NewTemperature – 32) *5) / 9
    If mdblFahrenheit < 32 Then 

RaiseEvent Below Freezing
End If
If mdbiFahrenheit > 212 Then
RaiseEventAbove Boiling
End If
End Property
Public Function GetCelsius() As Double
GetCelsius mdblCelsius
End Function
Public Function GetFahrenheit() As Double
GetFahrenheit = mdblFahrenheit
End Sub

  • Project को क्लिक करें तथा Visual Basic मेन्यू में PhysServer Properties को क्लिक करें। Project Properties डायलॉग बॉक्स में Project Description को बदलकर Physical Constants Server करें। OK को क्लिक करें।
  • प्रोजेक्ट को सुरक्षित करें।
  • File को क्लिक करें तथा कॉम कम्पोनेण्ट को बनाने के लिए Make PhysServer.dll क्लिक करें। अपने विजुअल स्टूडियो डॉट नेट कम्प्यूटर पर इस कॉम कम्पोनेण्ट को इंस्टॉल करने के लिए यह करें –
  • अपने हार्ड ड्राइव पर Legacy नाम का एक नया फोल्डर बनाएँ।
  • Legacy फोल्डर में PhysServer.dll को कॉपी करें।
  • कमाण्ड प्रॉम्प्ट विण्डो को खोलें तथा यह टाइप करें –

regsvr32            C:\Legacy\PhysServer.dll

TLBimp का उपयोग कर असेम्बली बनाना (Creating an Assembly using TLBIMP)

अब tlbimp का उपयोग कर असेम्बली का निर्माण करते हैं जो PhysServer कम्पोनेण्ट के लिए आर. सी. डब्ल्यू. (RCW) उपलब्ध कराता है। कंट्रोल पैनल में से सिस्टम ऐप्लेट को लॉन्च करते हैं-

  • विजुअल स्टूडियो डॉट नेट कमाण्ड प्रॉम्प्ट को खोलने के लिए Start को क्लिक करें, फिर All Programs को इंगित करें, फिर Microsoft Visual Studio2005 को इंगित करें तथा Visual Studio .NET Tools को इंगित कर Visual Studio.Net Command Prompt का चयन करें। 
  • \Legacy डायरेक्ट्री को बदलें।
  • तथा कमाण्ड प्रॉम्प्ट पर यह टाइप करें
यह भी देखें :  मूल शब्दों में एक ऑपरेटिंग सिस्टम क्या है | Best Operating System Kya Hai In Hindi

tlbimp PhysServer.dll                 / out : NETPhysServer.dll

इस विशेष स्थिति में हमने आर. सी. डब्ल्यू. के निर्माण को इसको बगैर साइन किये ही चुना है। यदि इस कम्पोनेण्ट को कई क्लाइण्ट्स के द्वारा शेयर किया तो इसे साइन करने की आवश्यकता पड़ेगी, जब हम tlbmp को इनवोक करते हैं। tubimp अनुवाद का कार्य करेगा तथा एक संदेश प्रदर्शित करेगा जो यह स्पष्ट करता है कि टाइप लायब्रेरी नये नाम के रूप में इम्पोर्ट हो गया है।

नोट : विजुअल स्टूडियो डॉट नेट कमाण्ड प्रॉम्प्ट पाथ में फ्रेमवर्क एस. डी. के. के /Bin फोल्डर में पाथ को जोड़ देता है, ताकि एस. डी. के. (SDK) टूल्स यथा tlbimp बगैर पाथ दिये हुए ही इनवोक किया जा सके।

परीक्षण प्रोजेक्ट को बनाना (Creating the Test Project)

अब आप legacy कॉम कम्पोनेण्ट से ऑब्जेक्ट के उपयोग करने की विजुअल बेसिक डॉट नेट एप्लिकेशन की क्षमता की जाँच कर सकते हैं। इसके लिए यह करें –

  • विजुअल स्टूडियो डॉट नेट खोलें।
  • File मेन्यू से New Project… को क्लिक करें।
  • स्क्रीन के बायीं ओर से Visual Basic Project का चयन करें।
  • Templates खण्ड में Windows Application का चयन करें।
  • Name टेक्स्ट बॉक्स में PhysServerTest टाइप करें तथा OK क्लिक करें।
  • सॉल्यूशन एक्स्प्लोरर से Form1.vb का चयन करें तथा इसका नाम frmTemperature.Vb करें।
  • PhysServer कॉम कम्पोनेण्ट के लिए आर. सी. डब्ल्यू, (RCW) का उपयोग करने के लिए Project के क्लिक करें तथा Add Reference का चयन करें। तत्पश्चात् Add Reference डायलॉग बॉक्स दिखेगा।
  • यह सुनिश्चित करें कि .NET टैब चयनित है तथा Browse को क्लिक करें।
  • Legacy फोल्डर को लोकेट करें तथा NETPhysServer.dII कम्पोनेण्ट का चयन करें। Open को क्लिक करें। ऐसा करने पर Selected Components सूची में वह कम्पोनेण्ट जुड़ जायेगा।
  • OK को क्लिक करें। ऐसा करने पर सॉल्यूशन एक्स्प्लोरर में References नोड फैल कर NetPhysServer रेफ्रेन्स (विजुअल बेसिक प्रोजेक्ट के डिफॉल्ट रेफ्रेन्स के साथ) दिखेगा।

कॉम कम्पोनेण्ट का उपयोग करने के लिए कोड जोड़ना (Adding Code to Use the Com Component)

अब आप Temperature क्लास के मेथड, प्रॉपर्टी तथा इवेण्ट को उपयोग करने वाले कोड लिखने के लिए तैयार हैं। View को क्लिक करें तथा Code को क्लिक करें तथा इस कोड को लिखें –
Private WithEvents moTemp As NETPhysServer.Temperature 

Private Sub btnConvertToC_Click (By Val Sender As System. Object, ByVal e As System.EventArgs)
Handles btnConvertToC.Click
IblBelow Freezing. Visible = False
lblAboveBoiling. Visible = False
With moTemp
Fahrenheit = txtFahrenheit. Text
txtCelsius. Text=. GetCelsius
End with
End Sub

Private Sub btnConvertToF_Click (By Val sender As System.Object, ByVal e As System.EventArgs)

Handles btnConverterToF.Click
lblBelow Freezing. Visible = False
lblAbove Boiling. Visible = False
With moTemp
.Celsius = txtCelsius. Text
txtFahrenheit.Text = .GetFahrenheit
End With
Private Sub frmTemperature_Load (By Val sender As System.Object ByVal e As System.EventArgs)_
Handles MyBase.Load
moTemp = New NETPhysServer. Temprature ()
End Sub
Private Sub moTemp_AboveBoiling() Handles moTemp.AboveBoiling
lblAboveBoiling.Visible = True
End Sub
Private SubmoTemp_BelowFreezing() Handles moTemp.BelowFreezing
lblBelowFreezing.Visible = True
End Sub

यहाँ ध्यान दें कि जहाँ तक इस कोड का संबंध है – NETPhysServer.Temperature क्लास किसी अन्य डॉट नेट क्लास की तरह ही है। आप क्लास के एक इंस्टैन्स को डिक्लेअर करें तथा अपने मेथड तथा प्रॉपर्टी का उपयोग इस तरह करें जैसे यह कॉम कम्पोनेण्ट के चारों ओर रनटाइम कॉलेबल रैपर के बजाय स्थानीय क्लास हो।
Temperature क्लास को क्रियान्वित करने के लिए इन पदों को करें-

  • F5 दबाकर प्रोजेक्ट को शुरू करें।
  • Fahrenheit टेक्स्ट बॉक्स में 41 टाइप करें तथा Convert to C को क्लिक करें। Celsius बॉक्स में 5 दिखेगा।
  • Celsius बॉक्स में 123 डालें तथा Convert to F क्लिक करें। Fahrenheit बॉक्स में 253.4 दिखेगा तथा Above Boiling! लेबल दृश्य हो जायेगा।

कॉम कम्पोनेण्ट को सीधे-सीधे उपयोग करना (Using the COM Component Directly)

अब आपने देख लिया है कि किस प्रकार tlbimp का उपयोग करें। अब कॉम कम्पोनेण्ट के सीधे-सीधे उपयोग करने की वैकल्पिक प्रक्रिया को देखते हैं।

  1. विजुअल स्टूडियो डॉट नेट को खोलें तथा पहले वाले को बंद न करें।
  2. File मेन्यू से New Project का चयन करें।
  3. Visual Basic Project का चयन स्क्रीन के बायीं ओर से तथा दायीं ओर से Windows Application का चयन करें।
  4. Name टेक्स्ट बॉक्स में PhyServerTest2 लिखें तथा OK को क्लिक करें।
  5. सॉल्यूशन एक्स्प्लोरर में Form1.vb का नाम बदलकर frmTemperature.vb करें।
  6. पहले से खुला विजुअल स्टूडियो डॉट नेट को स्विच करें तथा डिज़ायन व्यू में firmTemperature को खोलें  Ctrl+A का उपयोग कर फॉर्म के सभी कंट्रोल का चयन करें तथा Ctrl + C से उन सबको कॉपी करें।
  7. फिर दोबारा दूसरे विजुअल स्टूडियो डॉट नेट में आएँ तथा डिजायन व्यू में frmTemperature का चयन करें तथा CTRL+V का प्रयोग कर फॉर्म के सभी कंट्रोल को इस फॉर्म पर कॉपी करें।
  8. कॉम कम्पोनेण्ट को सीधे-सीधे उपयोग करने के लिए Project को क्लिक करें तथा Add Reference का चयन करें। Add Reference डायलॉग बॉक्स में COM टैब का चयन करें। लिस्ट में से Physical Constants Screen का चयन करें तथा OK को क्लिक करें।

यहाँ पर ठीक उत्तर इस पर निर्भर करता है कि कॉम कम्पोनेण्ट को किसने बनाया। यदि यह किसी विक्रेता या अन्य विकासकर्त्ता से आया है तो आपको No क्लिक करना चाहिए तथा उस विक्रेता या विकासकर्त्ता से प्राइमरी इंटरऑप असेम्बली (Primary Interop Assembly) प्राप्त करना चाहिए। इस स्थिति में यह कम्पोनेण्ट आपके अपने विकास के निजी हैं, इसलिए Yes को क्लिक कर विजुअल स्टूडियो डॉट नेट को इस कम्पोनेण्ट के लिए आर. सी. डब्ल्यू (RCW) निर्मित करने को निर्देश दे। आप सॉल्यूशन एक्स्प्लोरर में References की सूची में PhysServer प्रकट होता है।

नोट: यह मूल PhysServer.dll है, बल्कि आर. सी. डब्ल्यू. नहीं है जो आपने tlbimp का उपयोग कर आपने पहले बनाया है।
Rate this post
Suraj Kushwaha
Suraj Kushwahahttp://techshindi.com
हैलो दोस्तों, मेरा नाम सूरज कुशवाहा है मै यह ब्लॉग मुख्य रूप से हिंदी में पाठकों को विभिन्न प्रकार के कंप्यूटर टेक्नोलॉजी पर आधारित दिलचस्प पाठ्य सामग्री प्रदान करने के लिए बनाया है।

Related Articles

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Stay Connected

0FansLike
0FollowersFollow
0SubscribersSubscribe
spot_img
- Advertisement -

Latest Articles