мой код
//Marshal.Copy(bytes, 0, P2request, Marshal.SizeOf(request));
Marshal.StructureToPtr(request, P2request,true);
этот код C# предназначен для связи с оборудованием с помощью C++ dll, поэтому мне следует использовать Marshal.StructureToPtr для передачи структуры в указатель, но когда я это сделаю, это вызовет ошибку («Попытка для чтения или записи в защищенную память. Часто это признак того, что другая память повреждена».)
Хотя ошибка устранена, я не могу понять, почему? Надеюсь, кто-нибудь сможет помочь!
Как только я добавлю Marshal.Copy() для очистки буферов, ошибка исчезнет. это означает, что Маршал сможет записать его только тогда, когда я очищаю буфер?
// it works
Marshal.Copy(bytes, 0, P2request, Marshal.SizeOf(request));
Marshal.StructureToPtr(request, P2request,true);
И когда я установлю для третьего параметра значение false (это Marshal.StructureToPtr(request, P2request,false);), проблема тоже будет решена.
//it works
//Marshal.Copy(bytes, 0, P2request, Marshal.SizeOf(request));
Marshal.StructureToPtr(request, P2request,false);
Подробнее здесь: https://stackoverflow.com/questions/788 ... ion-that-o
«Попытка чтения или записи защищенной памяти. Часто это признак того, что другая память повреждена». В программе на C# ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение