#c# #memorystream #canon-sdk
#c# #memorystream #canon-sdk
Вопрос:
Я использую EDSK для преобразования потока памяти в изображение, он выдает следующую ошибку при
Ошибка: попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память повреждена.
Строка:ReadStream.Read(исходящее сообщение, 0, (int)длина потока);
unsafe
{
uint streamLength;
if (Error == EDSDK.EDS_ERR_OK)
{
Error = EDSDK.EdsGetLength(streamRef, out streamLength);
if (Error == EDSDK.EDS_ERR_OK)
{
UnmanagedMemoryStream readStream = new UnmanagedMemoryStream((byte*)(void*)streamRef.ToPointer(), streamLength, streamLength, FileAccess.Read);
// Create a byte array to hold data from unmanaged memory.
byte[] outMessage = new byte[streamLength];
// Read from unmanaged memory to the byte array.
readStream.Read(outMessage, 0, (int)streamLength);
readStream.Close();
Image img = byteArrayToImage(outMessage);
img.Save("C:\temp\test.jpeg");
}
}
Комментарии:
1. Почему-то вы, похоже, не хотите проверять
Error
после вызоваEdsGetLength
, есть ли у вас представление о том, возвращает ли оно действительноеstreamLength
?2. да, он возвращает streamLength = 4754647
3. Какая-либо конкретная причина, по которой вы приводите streamRef к void * перед приведением его к byte * ?
4. нет, но он выдает ту же ошибку с и без void*
5. Просматриваю некоторый пример кода , используя streamRef . ToPointer() неверен. Вы должны вызвать EdsGetPointer(), чтобы получить указатель на данные изображения.