न तो मौजूदा उत्तर सही है: विंडोज़ पर निम्नलिखित को देखते हुए: आपके पास दो डीएलएल हैं, प्रत्येक स्थिर रूप से सी/सी ++ मानक पुस्तकालयों के दो अलग-अलग संस्करणों से जुड़ा हुआ है।
इस मामले में, आपको एक डीएलएल में सी/सी ++ मानक पुस्तकालय द्वारा बनाई गई संरचनाओं के लिए पॉइंटर्स पास नहीं करना चाहिए। कारण यह है कि इन संरचनाओं दो C/C++ मानक पुस्तकालय कार्यान्वयन के बीच अलग-अलग हो सकता है।
दूसरी चीज जो आपको नहीं करना चाहिए वह एक डीएलएल से नए या मॉलोक द्वारा आवंटित एक सूचक है जो दूसरे में आवंटित किया गया था। ढेर मैनेजर भी अलग-अलग लागू किया जा सकता है।
नोट, आप डीएलएल के बीच पॉइंटर्स का उपयोग कर सकते हैं - वे बस स्मृति को इंगित करते हैं। यह मुफ़्त है कि मुद्दा है।
अब, आप पाते हैं कि यह काम करता है, लेकिन यदि ऐसा होता है, तो आप बस भाग्यशाली हैं। यह आपको भविष्य में समस्याएं पैदा करने की संभावना है।
आपकी समस्या का एक संभावित समाधान गतिशील रूप से CRT से लिंक कर रहा है। उदाहरण के लिए, आप गतिशील रूप से MSVCRT.DLL से लिंक कर सकते हैं। इस तरह आपका डीएलएल हमेशा एक ही सीआरटी का उपयोग करेगा।
नोट, मेरा सुझाव है कि डीएलएल के बीच सीआरटी डेटा संरचनाओं को पारित करने का यह सबसे अच्छा अभ्यास नहीं है। आप देखना चाहते हैं कि क्या आप चीजों को बेहतर तरीके से कारक बना सकते हैं।
नोट, मैं लिनक्स/यूनिक्स विशेषज्ञ नहीं हूं - लेकिन आपके पास उन ओएस पर भी वही समस्याएं होंगी।
मैं समस्याओं को समझता हूं - मैं इस समस्या के उत्तर के लिए पूछ रहा हूं :) मैं ऐसे समाधान की उम्मीद कर रहा था जो मौजूदा सी एपीआई (हस्ताक्षर में FILE * के साथ) को बदलने में नहीं लगता है, लेकिन ऐसा लगता है कि वहां है अगर मैं एक ही सी रनटाइम के खिलाफ लिंक करने के लिए सबकुछ गारंटी नहीं दे सकता? हालांकि समस्या सैद्धांतिक रूप से यूनिक्स पर समान है, लेकिन यह शायद ही कभी एक मुद्दा है क्योंकि केवल एक सी रनटाइम है। मुझे FILE * से गुजरने में एक भी समस्या नहीं थी, पुस्तकालयों के बीच यूनिक्स पर फाइल डिस्क्रिप्टर - बहुत से सी एपीआईएस इस तरह से डिजाइन किए गए हैं और उन ओएस पर बेकार ढंग से काम करते हैं। –
यदि एपीआई के हस्ताक्षर में FILE * होना अच्छा अभ्यास नहीं है, तो आप फ़ाइल स्ट्रीम से कैसे निपटते हैं? क्या आपको फ़ाइलों को खोलने और बंद करने के लिए फ़ंक्शंस को निर्यात करने की आवश्यकता है यदि आपके द्वारा कॉल किए गए डीएल में कुछ फ़ंक्शन हैं जो आंतरिक रूप से fprintf और अन्य कार्यों को FILE * की अपेक्षा करते हैं? –
मैंने सुझाव दिया था समाधान :) सीआरटी को स्थिर रूप से लिंक न करें। MSVCRT.DLL से लिंक करें। मैं आश्चर्यचकित हूं कि लिनक्स, यूनिक्स या मैक पर सभी सीआरटी पुस्तकालयों को दोषपूर्ण काम करने की गारंटी दी गई थी। मुझे लगता है कि आप भी भाग्यशाली रहे हैं। – Foredecker