Переполнение стека на Marshal.PtrToStructure чтения wmv файлов - PullRequest
0 голосов
/ 29 апреля 2010

Я использую класс захвата кадра для захвата и обработки каждого кадра в видео. Класс можно найти здесь: http://www.codeproject.com/KB/graphics/FrameGrabber.aspx

Однако у меня проблемы с запуском. При загрузке файла он пытается маршалировать указатель формата видео в VideoInfoHeader (я использую DirectShow.Net). Код, который делает это следующим образом:

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

Когда я запускаю это, оно немедленно вылетает из среды отладки, возможно, с переполнением стека. При просмотре я вижу, что formatPtr всегда равен 93, хотя я не знаю, что с этим делать, так как я довольно плохо знаком с маршаллингом.

Я проверил, нормально ли работает видео в проигрывателе Windows Media.

Это важно для определения размеров видео, а также размера заголовка, который необходимо пропустить, прежде чем можно будет прочитать кадры.

Я использую Windows 7 x64.

Любая помощь по этому вопросу будет принята с благодарностью, я, должно быть, попробовал пятнадцать различных методов захвата кадров.

1 Ответ

2 голосов
/ 29 апреля 2010

Может быть, ваша структура mediaType повреждена, вы проверяете, что она содержит перед вызовом? Где это залито?

Также я рекомендую запускать ваше приложение под WinDbg. Вы можете найти, что именно там происходит.

Если вы новичок в этом, попробуйте прочитать Блог Тесс Феррандез . Существует также много информации об отладке с помощью WinDbg, просто выполните поиск.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...