मेरे पास एक मूल डीएलएल है जो एक अलग अनुप्रयोग में प्लग-इन है (एक जिसे मेरे पास अनिवार्य रूप से शून्य नियंत्रण है)। सबकुछ तब तक बढ़िया काम करता है जब तक कि मैं एक अतिरिक्त .lib फ़ाइल से लिंक नहीं करता (मेरे डीएलएल को ABQSMABasCoreUtils.dll
नामक किसी अन्य डीएलएल से लिंक करता है)। इस फ़ाइल में मूल एप्लिकेशन से कुछ अतिरिक्त एपीआई है जिसका मैं उपयोग करना चाहता हूं। मैंने निर्यात किए गए किसी भी फ़ंक्शन का उपयोग करने के लिए कोई भी कोड भी नहीं लिखा है, लेकिन इस नए डीएलएल में बस लिंक करने से समस्याएं पैदा हो रही हैं। विशेष रूप से, जब मैं प्रोग्राम चलाने का प्रयास करता हूं तो मुझे निम्न त्रुटि मिलती है:Win32 DLL आयात करने वाले मुद्दे (DllMain)
एप्लिकेशन ठीक से शुरू करने में विफल रहा (0xc0000025)। आवेदन को समाप्त करने के लिए ओ के पर क्लिक करें।
मुझे विश्वास है कि मैंने कहीं पढ़ा है कि यह आम तौर पर एक DllMain फ़ंक्शन को FALSE लौटने के कारण होता है। इसके अलावा, निम्न संदेश मानक आउटपुट में लिखा है:
त्रुटि: मेमोरी आवंटन घटक प्रारंभ
से पहले की कोशिश की मैं कर रहा हूँ लगभग 100% यकीन है कि यह त्रुटि संदेश अनुप्रयोग से आ रहा है और किसी प्रकार की नहीं है विंडोज़ त्रुटि
यह एक छोटे से अधिक (उर्फ चारों ओर घिसटते हुए और flipping हर स्विच मैं के बारे में पता) में देख रहे हैं मैं जुड़ा हुआ साथ/एमएपी जिसके परिणामस्वरूप .map फ़ाइल में चालू है और यह पाया:
0001:000af220 [email protected]@Z 00000001800b0220 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af226 [email protected][email protected] 00000001800b0226 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af22c [email protected][email protected] 00000001800b022c f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
0001:000af232 [email protected]@Z 00000001800b0232 f ABQSMABasCoreUtils_import:ABQSMABasCoreUtils.dll
अगर मैं उन undecorate
void __cdecl operator delete(void * __ptr64)
void * __ptr64 __cdecl operator new(unsigned __int64)
void * __ptr64 __cdecl operator new[](unsigned __int64)
void __cdecl operator delete[](void * __ptr64)
मुझे यकीन है कि मैं समझता हूँ कि कैसे ABQSMABasCoreUtils.dll
से कुछ भी इस .map फ़ाइल के भीतर मौजूद कर सकते हैं या क्यों मेरे DLL भी ABQSMABasCoreUtils.dll लोड करने के लिए प्रयास कर रहा है नहीं कर रहा हूँ: "undname" वे निम्नलिखित (उसी क्रम) देने का उपयोग कर नाम अगर मेरे पास कोई कोड नहीं है जो संदर्भित करता है इस डीएलएल es। क्या कोई मुझे इस जानकारी को एक साथ रखने में मदद कर सकता है और यह पता लगा सकता है कि यह क्यों काम नहीं कर रहा है? इसके लायक होने के लिए मैंने "डंपबिन" के माध्यम से पुष्टि की है कि मूल आवेदन ABQSMABasCoreUtils.dll
आयात करता है, इसलिए इससे कोई फर्क नहीं पड़ता कि इससे कोई फर्क नहीं पड़ता। मैंने अपने डीएलएल में इस डीएलएल को लोड करने में देरी की कोशिश की है लेकिन इससे परिणाम नहीं बदले हैं।
संपादित
मैं डबल जाँच कर ली है और इसमें शामिल सभी फ़ाइलों 64 बिट कर रहे हैं।
क्या आपने आयात लाइब्रेरी के स्थिर लिंकिंग के बजाय 'LoadLibrary' का उपयोग करने का प्रयास किया है? यदि आप ऐसा करते हैं, तो आप मुख्य आवेदन पहले ही शुरू कर चुके हैं और आपके पास कुछ लाभ है। – Oleg
मैंने इसके बारे में सोचा लेकिन मैं इस पुस्तकालय से बड़ी संख्या में कार्यों का उपयोग कर समाप्त कर दूंगा। क्या मुझे प्रत्येक के लिए GetProcAddress का उपयोग नहीं करना पड़ेगा? यदि संभव हो तो मैं इससे बचना पसंद करूंगा। – brady
सी 0000025 = STATUS_NONCONTINUABLE_EXCEPTION। विंडबग में एप्लिकेशन चलाने का प्रयास करें और देखें कि यह कहां दुर्घटनाग्रस्त है; शायद यह आपको एक संकेत देगा। – Luke