Исключение нарушения доступа - PullRequest
1 голос
/ 31 августа 2010

У меня странная проблема. Я написал небольшой модуль на VC ++ с использованием OpenCV.

Работает нормально. Кодовый агрегат подается с камеры видеонаблюдения, подключенной к USB-порту.

однако мне пришлось написать оставшуюся часть моего приложения на C #, поэтому я создал DLL из кода VC ++ и вызвал метод VC ++ из C #.

Теперь я получил ошибку

Attempted to read or write protected memory. 
This is often an indication that other memory is corrupt.

Может кто-нибудь предложить мне какое-нибудь решение этого. Есть ли нарушение прав доступа при доступе к нему в управляемом коде?

1 Ответ

1 голос
/ 31 августа 2010

Если TrackBlob возвращает строку, вы должны определить dllimport следующим образом:

[DllImport("Tracking.dll", EntryPoint = "TrackIt")] 
public extern static string TrackBlob();

и пропустите попытку упорядочить его.

Возвращая его как IntPtr, вы пытаетесь вставить указатель в память, принадлежащую неуправляемой DLL ... возвращая его в виде строки, вы получите копию строки для работы с ней.

Дайте мне знать, если это работает! Джеймс

* Редактировать *

Попробуйте один из них:

[DllImport("Tracking.dll", EntryPoint = "TrackIt")] 
public extern static [MarshalAs(UnmanagedType.BStr)] string TrackBlob();

или

[DllImport("Tracking.dll", EntryPoint = "TrackIt")] 
public extern static [MarshalAs(UnmanagedType.AnsiBStr)] string TrackBlob();

Проверьте эту ссылку MSDN на сортировку строк:
http://msdn.microsoft.com/en-us/library/s9ts558h.aspx

...