डीएलएल सीमाओं पर एसटीएल कंटेनर का खुलासा करना एक अच्छा विचार नहीं है, और आम तौर पर संभव नहीं है (this answer for why, और this one को एक डीएल पर एक std :: सूची को उजागर करने के बारे में देखें सीमा)। मुझे अलग-अलग (वीसी 08/वीसी 10 +) कंपाइलर्स के साथ संकलित डीएलएल और एक्सई के बीच डेटा पास करने में सक्षम होना चाहिए; this Q केवल वही सब कुछ है जो एक जैसा है।एक डीएलएल सीमा पर std :: vector का खुलासा - संकलक स्वतंत्रता के लिए सर्वोत्तम अभ्यास
उन्हें बेनकाब करने का सबसे अच्छा तरीका क्या है? वेक्टर सूचियों से थोड़ा अलग हैं जिसमें स्मृति को संगत होने की गारंटी दी जाती है, इसलिए यदि मुझे केवल युगल के कॉन्स वेक्टर की आवश्यकता है, तो क्या मैं केवल डीएल में फ़ंक्शन में ब्लॉक के लिए प्रारंभ और अंत पॉइंटर्स की आपूर्ति कर सकता हूं? डीएल को वैक्टरों की एक सरणी की तरह कुछ संरचना वापस करने की भी आवश्यकता है।
template <typename T>
struct vecWrapper<T> {
T* begin;
T* end;
}
// in the dll
int func(vecWrapper<double> numbers);
कि समझदार होगा:
मैं एक struct शुरू और समाप्त संकेत युक्त के बारे में सोचा? संभवत: फ़ंक्शन से जो कुछ भी लौटाया जाता है उसे एक विनाशक (डीएलएल पक्ष पर) की आवश्यकता होती है जो चीजों को नष्ट कर देती है।
संबंधित, कृपया पढ़ें: http://stackoverflow.com/questions/5661738/common-practice-in-dealing-with-warning-c4251-class-needs-to-have-dll-inter/5664491#5664491 –
चीयर्स @ जॉन डीबलिंग, यह एक अच्छा स्पष्टीकरण है कि एसटीएल कंटेनर का पर्दाफाश क्यों न करें। इसलिए डेटा का खुलासा करने का सवाल खुद ही है। मैं उम्मीद कर रहा हूं कि आगे की आवश्यकता के बिना संगत आवश्यकता संभव हो जाती है। –
क्यों न केवल एक पुरानी पुरानी सरणी पास करें? – Rook