मुझे लगता है कि एक निर्यातित सी ++ डीएलएल से मेरे सी # प्रोग्राम में एक सरणी को वापस कैसे करना है, यह समझने में प्रतीत नहीं होता है। गुगलिंग से मिली एकमात्र चीज मार्शल.कॉपी() को सरणी को एक बफर में कॉपी करने के लिए उपयोग कर रही थी, लेकिन यह मुझे उन मूल्यों को नहीं देती है जिन्हें मैं वापस करने की कोशिश कर रहा हूं, मुझे नहीं पता कि यह मुझे क्या दे रहा है।वापसी सी ++ सरणी सी #
यहाँ मैं क्या कोशिश कर रहा है या नहीं:
निर्यात समारोह:
extern "C" __declspec(dllexport) int* Test()
{
int arr[] = {1,2,3,4,5};
return arr;
}
सी # भाग:
[DllImport("Dump.dll")]
public extern static int[] test();
static void Main(string[] args)
{
Console.WriteLine(test()[0]);
Console.ReadKey();
}
मैं जानता हूँ कि वापसी प्रकार int [] की वजह से शायद गलत है प्रबंधित/अप्रबंधित मतभेद, मुझे नहीं पता कि यहां से कहाँ जाना है। मुझे कुछ भी जवाब नहीं मिल रहा है लेकिन तारों के लिए चरित्र सरणी लौटा रहा है, पूर्णांक सरणी नहीं।
मुझे लगता है कि मार्शल के साथ मुझे जो मूल्य मिल रहा है, वह कारण नहीं है। कॉपी नहीं है जो मैं लौट रहा हूं क्योंकि निर्यातित फ़ंक्शन में 'arr' सरणी हटा दी जाती है लेकिन मुझे 100% निश्चित नहीं है, अगर कोई इसे साफ़ कर सकते हैं कि यह बहुत अच्छा होगा।
http://stackoverflow.com/questions/3776485/marshal-c-int-array-to-c-sharp यह आपको –
मदद मिल सकती है [अच्छा नहीं।] (Http://stackoverflow.com/प्रश्न/6441218/कैन-ए-लोकल-वेरिएबल्स-मेमोरी-आउट-आउट-आउट-स्कोप) – chris
धन्यवाद क्रिस, मैं इस तरह इतना पकड़ा गया था कि मैं भूल गया कि मैं क्या कर रहा था। मैं अपने कोड को थोड़ा सा बदलने जा रहा हूं, इस तरह से मेरा निर्यात किया गया फ़ंक्शन पते में एक बफर में ले जाता है और वहां से बफर भरता है। – David