में अनुपलब्ध घटक त्रुटि प्राप्त करना मेरे पास एक वीबी 6 ऐप है जिसमें तीसरे पक्ष के घटक हैं। एप्लिकेशन अच्छी तरह से काम करता है, लेकिन बाहर निकलने पर (और केवल जब एक स्टैंडअलोन EXE, जैसे आईडीई में नहीं के रूप में चल), यह पॉप अप होता है एक त्रुटि संदेश:वीबी 6 एप्लिकेशन
मैं इस तरह की त्रुटियों को देखा है से पहले, लेकिन आम तौर पर यह कहता है कि कौन सा घटक निर्भरता खो रहा है या ठीक से पंजीकृत नहीं है।
मैं इसे माध्यम से प्रक्रिया की निगरानी भाग गया और निम्न फ़ाइलें है कि यह नहीं मिल सकता है मिल गया:
और फिर यह इस्तीफा। मैंने फ़ाइल नामों को गुगल किया है जो इसे नहीं ढूंढ पा रहे हैं और कुछ भी नहीं ढूंढ सकते हैं। ऐसा लगता है कि यह MSComENU, MSComEN और MSCOENU dlls की विविधता की खोज करता है।
मैं जाँच की और सुनिश्चित करें कि सभी 3 पार्टी घटकों देखते हैं और वे कर रहे हैं बनाने के लिए फिर से जांचा - आवेदन कार्यों ठीक है, यह नहीं तो वे वहाँ नहीं थे होगा।
यह ध्यान देने योग्य है कि वीबी 6 कोड की अंतिम पंक्ति के बाद त्रुटि होती है (Form_Unload
ईवेंट में) निकाल दिया गया है। मुझे यह पता है क्योंकि आखिरी पंक्ति एक संदेश बॉक्स है जो प्रकट होता है।
अधिकतर बाद में EDIT: मैं अंततः समस्या से निपटने के लिए वापस आ गया और उन्मूलन की प्रक्रिया के द्वारा इसे समझ लिया (और यह एक लूंग प्रक्रिया थी)। अंत में किसी भी एमएससीओएमएम *। डीएल प्रविष्टियों के साथ इसका कोई लेना-देना नहीं था। वास्तव में, मुझे नहीं पता कि वे अभी भी प्रक्रिया मॉनीटर में क्यों दिखते हैं। समस्या बहुत आसान थी।
मैं मुख्य रूप पर कई 3 पार्टी नियंत्रण था। ईवेंट प्रबंधन कोड की एक टन के साथ मुख्य रूप अपवित्र करने के लिए नहीं के प्रयास में, मैं एक नया वर्ग के लिए इन नियंत्रणों प्रत्यायोजित, इसलिए जैसे:
' declaration code in main form'
Private WithEvents moDelegateObject as clsDelegateObject
' still in the main form, after initialization'
Set moDelegateObject = new clsDelegateObject
With moDelegateObject
Set .ThirdPartyCtlHandler1 = me.ThirdPartyCtl1
Set .ThirdPartyCtlHandler2 = me.ThirdPartyCtl2
Set .ThirdPartyCtlHandler3 = me.ThirdPartyCtl3
end with
' declarations and properties inside of clsDelegateObject'
Private WithEvents moThirdPartyCtlHandler1 as ThirdPartyCtl
Private WithEvents moThirdPartyCtlHandler2 as ThirdPartyCtl
Private WithEvents moThirdPartyCtlHandler3 as ThirdPartyCtl
Public Event FooEvent() ' other various events as well '
Public Property Set ThirdPartyCtlHandler1(o as ThirdPartyCtl)
moThirdPartyCtlHandler1 = o
End Property
Public Property Get ThirdPartyCtlHandler1() as ThirdPartyCtl
ThirdPartyCtlHandler1 = moThirdPartyCtlHandler1
End Property
' ... Repeat for each handler ...'
क्या याद आ रही थी स्पष्ट रूप से बंद करने से पहले इन वस्तुओं पुनःआवंटन करने के लिए कोड था। यह ऐसा कुछ है जो विजुअल बेसिक आमतौर पर करता है। इसलिए मैं मुख्य रूप में Form_QueryClose में निम्नलिखित कहा:
With moDelegateObject
Set .ThirdPartyCtlHandler1 = Nothing
Set .ThirdPartyCtlHandler2 = Nothing
Set .ThirdPartyCtlHandler3 = Nothing
End with
Set moDelegateObject = Nothing
अंतिम लाइन निकला superflous होने के लिए, लेकिन मैं पूर्णता के लिए वहाँ में फेंक दिया। मुझे लगता है कि यह एक प्रतिनिधि वर्ग को नियंत्रण देने और मुख्य रूप में घटनाओं को प्राप्त करने और वास्तव में अस्पष्ट तृतीय पक्ष नियंत्रणों की एक अच्छी संख्या का उपयोग करके इस समस्या में योगदान देने का एक संयोजन था। यह संभव है कि तीसरा पक्ष नियंत्रण स्वयं को साफ-साफ नहीं करता है। वैसे भी, सबक सीखा।
+1। @ नानामी करीबी मतदाता: यह एक अच्छा सवाल है। इन समस्याओं का निदान करना मुश्किल है, विशेषज्ञता साझा करना बहुत उपयोगी है। – MarkJ
क्या यह समस्या एक कंप्यूटर (विकास मशीन?) के लिए विशिष्ट है, या यह अन्य कंप्यूटरों पर दोहराने योग्य है? क्या यह अभी एक ऐप में हो रहा है जो पहले ठीक काम कर रहा है? – MarkJ
के रूप में अगर MSComm32.dll अमेरिका अंग्रेजी स्थान के लिए त्रुटि संदेश संसाधन DLL लोड करने का प्रयास एक अमेरिकी अंग्रेजी मशीन/उपयोगकर्ता के सत्र पर चल रहा है की एक विदेशी भाषा के संस्करण में कुछ त्रुटि हुई (या सिर्फ एक libload विफलता) मेरे लिए लग रहा है। – Bob77