У меня есть файл DLL
, который написан на C. Я пытаюсь использовать в C DLL (ImportDLL) в своем C# -коде. Мой метод возвращает параметр. Метод C называется правильно, но он разбился после того, как процесс и дает ошибку **"System.AccessViolationException: Attempted to read or write protected memory.
AccessViolationExceptiond: Попытка чтения/записи защищенной памяти
Это часто указывает на то, что другая память повреждена "** после процесса завершения.
Мой C декларация
int preProcessAndBestImagesC(
char* ...,
size_t* ...,
char** ...,
size_t* ...,
(struct)* ...,
size_t* ...,
int** ...,
(struct)** ...,
int ...,
int printStatus
);
Мои C# Декларация
[DllImport(@"abc.dll", CallingConvention = CallingConvention.StdCall, SetLastError = true, BestFitMapping = true, EntryPoint = "xxx")]
[return: MarshalAs(UnmanagedType.I4)]
unsafe private static extern int xxx(
String p_ ...,
[MarshalAs(UnmanagedType.I2)] out UInt16 p_numImageFilesOrDirs,
String[] p_vecImageFilesOrDirs,
[MarshalAs(UnmanagedType.I2)] out UInt16 ...,
[MarshalAs(UnmanagedType.LPArray)] out (struct)[] ...,
[MarshalAs(UnmanagedType.I2)] out UInt16 ...,
out Int16[] ...,
[MarshalAs(UnmanagedType.LPArray)] out (struct)[] ...,
[MarshalAs(UnmanagedType.I2)] Int16 ...,
[MarshalAs(UnmanagedType.I2)] Int16 ...
);
кто-нибудь знает, в чем проблема?
Пробовал ли вы Google для этого? Я уверен, что вы уже найдете полезные ответы, даже здесь, в stackoverflow. –