यदि आपका सी # में होना चाहिए है struct केवल आदिम डेटा प्रकार का उपयोग करता है और C++ में अपनी मूल struct के रूप में बिल्कुल एक ही लेआउट है, तो आपको नियमित स्मृति मीटर के साथ इन प्रतिबंधों के आसपास प्राप्त कर सकते हैं सगाई और असुरक्षित कोड। बोनस के रूप में, आप marshalling से परहेज करके प्रदर्शन में सुधार होगा।
स्मृति का आवंटन:
IntPtr arr = Marshal.AllocHGlobal (sizeof (MyStruct) * 256);
यह मूलतः malloc
है, इसलिए आबंटित स्मृति जीसी के बारे में जागरूकता के बाहर है।
आप इंटिप्ट को मूल कोड में पास कर सकते हैं जैसे कि यह MyStruct[256]
था और केवल इंटिप्टर को मार्शल किया जाएगा, न कि स्मृति को इंगित करता है। मूल और प्रबंधित कोड सीधे उसी स्मृति तक पहुंच सकते हैं।
पढ़ने के लिए/साथ सी # सरणी में structs लिखते हैं, का उपयोग सी # संकेत:
static unsafe MyStruct GetMyStructAtIndex (IntPtr arr, int index)
{
MyStruct *ptr = ((MyStruct *)arr) + index;
return *ptr;
}
static unsafe void SetMyStructAtIndex (IntPtr arr, int index, MyStruct value)
{
MyStruct *ptr = ((MyStruct *)arr) + index;
*ptr = value;
}
Marshal.FreeHGlobal (arr);
के लिए मत भूलना जब आप स्मृति के साथ पूरा कर लें, free
को यह।
स्रोत
2011-11-01 23:25:56
कोई समाधान नहीं? तो मैं इसे सी ++ में कर सकता हूं? – uray
@uray केवल एक चीज जो मैं सुझा सकता हूं वह एक नियमित सरणी है। यदि यह संभव नहीं है, तो ... –