Неуправляемый код, который не работает должным образом на 64-битной платформе - PullRequest
1 голос
/ 03 мая 2011

Я использую код, который захватывает кадр из видео, которое я нашел в CodeProject

Код отлично работает на 32-битной, проблема начинается, когда я пытаюсь работать на 64-битных системах.

Исключением является «AccessViolationException: попытка чтения или записи защищенной памяти. Это часто указывает на то, что другая память была повреждена» *

Я отладил на 32-битной и 64-битной платформах и нашелгде проблема -

mediaType = new AMMediaType();

mediaDet.get_StreamMediaType(mediaType);

videoInfo = (VideoInfoHeader)Marshal.PtrToStructure(mediaType.formatPtr, typeof(VideoInfoHeader));

После второй строки я посмотрел на содержимое mediaType, и оно полностью отличается в 64-разрядной версии через 32, что приводит к тому, что следующая строка вызывает исключение (mediaType.formatPtr имеет другое значение)

Я предполагаю, что проблема связана с типом "IntPtr", размер которого отличается на 2 платформах (4 против 8 байт), но я не знаю, как решить эту проблему.

Любая помощь будет хорошей, заранее спасибо, Лиран.

1 Ответ

1 голос
/ 04 мая 2011

нашел решение - проблема лежит в DirectShow DLL, FrameGrabber ссылается на старую версию dll, я скачал и заменил ссылку на их последнюю DLL и проблема решена.

Спасибо за ваш пост, Лиран.

...