Tôi đang cố gắng để gọi hàm sau C++ đó là gói lên thành một DLL:Làm thế nào bạn có thể So sánh một mảng byte trong C#?
unsigned char * rectifyImage(unsigned char *pimg, int rows, int cols)
tuyên bố nhập khẩu của tôi trông giống như sau:
[DllImport("mex_rectify_image.dll")]
unsafe public static extern IntPtr rectifyImage(
byte[] data, int rows, int columns);
Và thói quen gọi tôi trông giống như sau:
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);
Tuy nhiên, tôi tiếp tục nhận được một lỗi runtime:
Trường hợp ngoại lệ đầu tiên của loại System.AccessViolationException
xảy ra trong xxx.dll Đã cố gắng đọc hoặc ghi bộ nhớ được bảo vệ. Đây thường là dấu hiệu cho thấy rằng bộ nhớ khác bị hỏng.
Tôi chỉ tự hỏi nếu lỗi nằm trong cách tôi marshaling dữ liệu của tôi hoặc trong tập tin DLL nhập khẩu của tôi ... bất cứ ai có bất kỳ ý tưởng?
Bạn có thể muốn xem câu hỏi này: http://stackoverflow.com/questions/289076/how-can-i-pass-a-pointer-to-an-array-using- p-invoke-in-c – Bobby
Giá trị trả về từ 'rectifyImage' có được giải phóng không, và nếu có thì làm thế nào? –
Giá trị trả về cho rectifyImage được sử dụng để tạo đối tượng C# Bitmap và sau đó được giải phóng. Tôi đã không nhận được xung quanh để cố gắng tìm ra cách để thực sự miễn phí nó được nêu ra. – Tim