public static int CreateDirectShowFilter(Guid guid, out IBaseFilter filter)
{
Type type = Type.GetTypeFromCLSID(guid);
try
{
filter = (IBaseFilter)Activator.CreateInstance(type);
return S_OK;
}
catch (AccessViolationException ex)
{
filter = null;
return ex.HResult;
}
catch (Exception ex)
{
filter = null;
return ex.HResult;
}
}
Если тыкать по кнопке, которая очищает и перестраивает граф, то довольно часто вылетает ошибка Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.. При этом, программа наворачивается, несмотря на catch.
Стэк вызовов показывает, что метод с ошибкой был вызван из метода, который перебирает сплиттеры. Но знание этого особо ничего не даёт
Ну серьезно … А какой совет то вы хотите услышать??
Даже студия вам сказала “Это часто свидетельствует о том, что другая память повреждена.”
Не видя кода ничего и не сказать. При каком гуиде ошибка вылазит? может фильтра такого нету??
тут было 8 успешных попыток.
.....
Main form received player action: Play
File name: H:\Downloads\completed\Doctor.Who.S10.WEB-DLRip.BaiBaKo.TeamNotDead\Doctor.Who.S10E00.WEB-DLRip.BaiBaKo.TeamNotDead.mkv
Building graph in manual mode.
Automatic media splitter selection mode.
"Zeratool.exe" (CLR v4.0.30319: Zeratool.exe). Загружено "C:\Windows\Microsoft.Net\assembly\GAC_MSIL\mscorlib.resources\v4.0_4.0.0.0_ru_b77a5c561934e089\mscorlib.resources.dll". Сборка модуля выполнена без символов.
Вызвано исключение: "System.AccessViolationException" в Zeratool.exe
Необработанное исключение типа "System.AccessViolationException" в Zeratool.exe
Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
"Zeratool.exe" (CLR v4.0.30319: Zeratool.exe). Загружено "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\IDE\PrivateAssemblies\Runtime\Microsoft.VisualStudio.Debugger.Runtime.Desktop.dll". Загрузка символов пропущена. Модуль оптимизирован, включен параметр отладчика "Только мой код".
Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена.
в Zeratool_player_C_Sharp.DirectShowUtils.CreateDirectShowFilter(Guid guid, IBaseFilter& filter) в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\DirectShowUtils.cs:строка 60
в Zeratool_player_C_Sharp.ZeratoolPlayerEngine.FindAndConnectMediaSplitter_Manual(IEnumerable`1 splitters, IPin sourcePinOut) в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\ZeratoolPlayerEngine.cs:строка 552
в Zeratool_player_C_Sharp.ZeratoolPlayerEngine.ConnectMediaSplitter_Manual(IPin sourcePinOut) в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\ZeratoolPlayerEngine.cs:строка 537
в Zeratool_player_C_Sharp.ZeratoolPlayerEngine.BuildGraphManual() в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\ZeratoolPlayerEngine.cs:строка 390
в Zeratool_player_C_Sharp.ZeratoolPlayerEngine.BuildGraph() в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\ZeratoolPlayerEngine.cs:строка 342
в Zeratool_player_C_Sharp.ZeratoolPlayerEngine.Play() в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\ZeratoolPlayerEngine.cs:строка 1160
в Zeratool_player_C_Sharp.ZeratoolPlayerGui.Play() в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\ZeratoolPlayerGui.cs:строка 186
в Zeratool_player_C_Sharp.Form1.PlayerHandleKeyboard(ZeratoolPlayerGui controlledPlayer, KeyEventArgs e) в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\Form1.cs:строка 96
в Zeratool_player_C_Sharp.Form1.Form1_KeyDown(Object sender, KeyEventArgs e) в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\Form1.cs:строка 60
в System.Windows.Forms.Control.OnKeyDown(KeyEventArgs e)
в System.Windows.Forms.Control.ProcessKeyEventArgs(Message& m)
в System.Windows.Forms.Form.ProcessKeyPreview(Message& m)
в System.Windows.Forms.Control.ProcessKeyMessage(Message& m)
в System.Windows.Forms.Control.WmKeyChar(Message& m)
в System.Windows.Forms.Control.WndProc(Message& m)
в System.Windows.Forms.ScrollableControl.WndProc(Message& m)
в System.Windows.Forms.UserControl.WndProc(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
в System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
в System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
в System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
в System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
в System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
в System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
в System.Windows.Forms.Application.Run(Form mainForm)
в Zeratool_player_C_Sharp.Program.Main() в H:\Projects\CSharp 2019\Zeratool player C Sharp\Zeratool player C Sharp\Program.cs:строка 16
Программа "[8524] Zeratool.exe" завершилась с кодом 0 (0x0).
Попробовал много раз вызывать эту процедуру отдельно - всё нормально.
Видимо, придётся комментировать участки кода и смотреть, когда пропадёт ошибка.
На Delphi часто приходилось так делать.
Подозреваю, что ошибка связана с пинами В MSDN не нашел, надо их уничтожать или нет Я их уничтожаю, а, возможно, не надо FindAndConnectMediaSplitter_Manual(IEnumerable`1 splitters,
Интересно, что значит 1?
Кажется, ошибка найдена и исправлена. Я, случайно, освобождал не тот пин, который надо было.
Сделал коммит в новом проекте плеера, если кому-то, внезапно, интересно.