У меня есть nuget, образованный из проекта C++ - внутри этого nuget У меня есть extern-метод GetBytes
внутри статического класса FileAccess.cs, который я вызываю в вызове службы REST другого проекта (C#) получить некоторые данные. Всякий раз, когда я вызываю этот метод GetBytes
extern
из моей службы REST C#, я почему-то получаю AccessViolationException
. Метод принимает две строки и несколько значений int и возвращает IntPtr
.AccessViolationException при вызове метода extern напрямую
Я смущен, потому что у меня есть аналогичный вызов, который не приводит к нарушению. Главное отличие заключается в том, что эта версия не вызывает метод extern напрямую. Вместо этого он вызывает класс C# DataGroup (который является частью nuget), который содержит функцию, вызывающую метод extern. Метод класса DataGroup возвращает byte[,]
, но только после того, как он вызывает метод extern и маршалы данных.
// Версия в результате AccessViolation:
- REST вызова экстерном метод как
IntPtr
(IntPtr ptr = FileAccess.getBytes(...);
- экстерном метод возвращает
IntPtr
AccessViolationException
происходит
// Рабочая версия с дополнительный класс:
- REST вызов метода группы данных, который возвращает
byte[,]
. (Например,dataGroupInstance.getDataGroupBytes();
- ехЬегп метод вызывается внутри метода
getDataGroupBytes
- ехЬегп метод возвращает метод
IntPtr
getDataGroupBytes
маршалов данные изIntPtr
и возвращает неbyte[,]
- никакой ошибки
В принципе, почему вызвав метод extern, непосредственно приводящий к AccessViolationException
?
Если ваш 'FileAccess.getBytes (...);' метод принимает varargs, убедитесь, что вы установили 'CallingConvention.Cdecl' на подпись PInvoke. – Peter