मैं निम्नलिखित सी ++ समारोह है कि एक DLL में लिपटे है कॉल करने के लिए कोशिश कर रहा हूँ:आप सी # में मार्टल एक बाइट सरणी कैसे कर सकते हैं?
unsigned char * rectifyImage(unsigned char *pimg, int rows, int cols)
मेरे इंपोर्ट स्टेटमेंट की तरह लग रहा है:
[DllImport("mex_rectify_image.dll")]
unsafe public static extern IntPtr rectifyImage(
byte[] data, int rows, int columns);
और मेरे कॉल दिनचर्या ऐसा दिखाई देता है:
:byte[] imageData = new byte[img.Height * img.Width * 3];
// ... populate imageData
IntPtr rectifiedImagePtr = rectifyImage(imageData, img.Height, img.Width);
Byte[] rectifiedImage = new Byte[img.Width * img.Height * 3];
Marshal.Copy(rectifiedImagePtr, rectifiedImage, 0, 3 * img.Width * img.Height);
हालांकि, मैं एक क्रम त्रुटि प्राप्त हो रही
टाइप System.AccessViolationException
का पहला मौका अपवाद xxx.dll में हुआ था सुरक्षित स्मृति को पढ़ने या लिखने का प्रयास किया गया। यह अक्सर एक संकेत है कि अन्य स्मृति भ्रष्ट है।
मैं सोच रहा हूं कि क्या गलती मेरे डेटा या मेरी आयातित डीएलएल फ़ाइल में मार्शल कर रही है ... किसी के पास कोई विचार है?
आप इस प्रश्न को देखना चाहते हैं: http://stackoverflow.com/questions/289076/how-can-i-pass-a-pointer-to-an-array-using- पी-इनवोक-इन-सी – Bobby
'rectifyImage' से वापसी मूल्य को मुक्त किया जाना चाहिए, और यदि हां, तो कैसे? –
rectifyImage के लिए वापसी मूल्य का उपयोग C# बिटमैप ऑब्जेक्ट बनाने के लिए किया जाता है, और फिर मुक्त किया जाता है। मैं अभी तक इसे मुक्त करने के तरीके को समझने की कोशिश करने के लिए चारों ओर नहीं मिला है। – Tim